Power Automate含子记录时触发器重复执行问题求助
Power Automate关联子记录时重复触发的解决方法
方案1:限定触发器的触发字段
在「When a row is added, modified or deleted」触发器的高级选项中,配置「Trigger Conditions」,只监听主记录中与审批相关的核心字段变化(比如审批状态、审批人),避免子记录修改触发的系统字段(如modifiedon)引发重复运行。
- 示例条件:
@not(equals(triggerBody()?['approvalstatus'], triggerBody()?['_approvalstatus_old'])) - 作用:只有当审批状态字段发生实际变更时,才触发流程,子记录修改不会影响该字段,因此不会重复触发。
方案2:添加重复执行校验逻辑
在流程开头新增以下步骤,过滤重复触发的请求:
- 添加「Compose」动作,生成唯一标识:
concat(triggerBody()?['@odata.id'], triggerBody()?['modifiedon'])(主记录ID+最后修改时间戳) - 添加「Get rows」动作,查询一个用于记录已处理标识的辅助Dataverse表(需提前创建,包含「唯一标识」和「处理时间」字段)
- 添加「Condition」动作,判断当前生成的唯一标识是否已存在于辅助表中:
- 若存在:直接终止流程(添加「Terminate」动作,状态设为「Succeeded」)
- 若不存在:继续执行后续逻辑,并将该唯一标识写入辅助表(添加「Add a row」动作)
方案3:利用延迟+状态重检
针对两次触发间隔极短的情况,通过延迟后重检记录状态来避免重复处理:
- 在触发器之后添加「Delay」动作,设置延迟时间为5-10秒(根据实际场景调整)
- 添加「Get record」动作,重新获取当前主记录的最新数据
- 添加「Condition」动作,对比重检的记录状态与触发器输出的状态:
- 若状态一致且未被处理过:继续执行
- 若已被处理:终止流程
方案4:调整并发控制与触发范围
- 进入流程的设置页面,开启「Concurrency Control」,将并行度设置为1,确保同一记录的触发请求串行执行
- 在触发器的「Filter rows」中,添加筛选条件,仅针对审批完成后的记录(比如
approvalstatus eq 'Approved'),缩小触发范围,减少不必要的触发机会
内容的提问来源于stack exchange,提问作者Mikkel Kristensen
相关产品推荐
相关产品推荐

