如果一个工作流由记录变化触发,执行过程中又更新了同一条记录,是否可能再次启动相同流程?Busabase 应该怎样配置触发条件,才能只响应需要处理的业务变化,避免流程反复执行?
Question
Closed · Answered工作流更新记录后,会不会再次触发自己?
Someone official has picked this up and is working on it. ·
Thuy Tan Pham

可能再次触发。 如果流程监听的是 Busabase 的 record.updated 事件,执行中回写同一条记录并生效后,仍可能产生新的更新事件,不能默认系统会自动忽略“流程自己造成的修改”。
建议将“收到更新事件”和“执行实际业务”分开:收到事件后先判断是否需要处理,不满足条件就退出,不再写回记录。
例如,可以按下面的方式设计:
- 明确业务触发条件
只处理“状态为待处理,且当前业务版本尚未处理”的记录。业务输入与处理结果分开保存,不要把所有字段更新都视为新任务。
- 记录已处理的业务版本
比如本次处理的是业务版本 3,完成后记录“已处理版本=3”。这次回写即使再次触发事件,流程发现版本已处理,就直接退出。不要仅用整条记录的更新时间作判断,因为结果回写本身也会改变它。
- 避免无变化的写入
结果相同就不重复保存,也不要在每次触发时都更新“处理时间”,否则可能持续制造新的更新事件。
- 同时防重复投递和并发执行
HTTP 投递可能重试。涉及发消息、创建订单等操作时,需要按“流程+记录+业务版本”去重;并发场景还需要可靠的锁或原子登记,仅靠“先读标记、再写标记”不能保证只执行一次。
这些判断需要在接收事件的外部流程、函数或 Agent 逻辑中实现;目前核对的事件规则不能直接等同于已提供“忽略自身更新”或“仅指定字段变化时触发”的配置开关
Your reply
Sign in to join the discussion. Reading is always open; you only need an account to post.
Sign in