请求指导:用Power Automate实现Dataverse子任务触发项目更新
Power Automate实现子任务全完成时更新项目状态的详细步骤
前提说明
你的表关系:Projects ← Tasks(lookup列)← Sub-tasks(lookup列),Sub-tasks关联Statuses表的Status_ID列,目标是:当某Task下所有Sub-tasks的Status_ID均为1时,更新对应Project为“Done”状态。
步骤1:创建新云流并设置触发器
- 打开Power Automate,创建自动云流,选择触发器:
当行被创建或更新(Dataverse连接器) - 配置触发器:
- 表:选择
Sub-tasks - 可选:添加触发条件(仅当Status_ID字段变化时触发),减少无效流运行
- 表:选择
步骤2:获取当前子任务关联的Task记录
- 添加动作:
获取单个行(V2)(Dataverse连接器) - 配置:
- 表:选择
Tasks - 行ID:选择触发器输出中Sub-tasks的Task lookup列对应的ID值(注意选ID而非显示名称)
- 表:选择
步骤3:获取该Task下的所有Sub-tasks
- 添加动作:
获取行(V2)(Dataverse连接器) - 配置:
- 表:选择
Sub-tasks - 筛选行:输入筛选条件,格式为
Task eq @{outputs('获取单个行_(V2)')?['body/<<Tasks表的主键列名>>']}- 替换
<<Tasks表的主键列名>>为你Tasks表自增ID列的逻辑名称(比如taskid,可在Dataverse表的列设置中查看“逻辑名称”)
- 替换
- 表:选择
步骤4:检查所有Sub-tasks的Status_ID是否均为1
以下两种方式二选一即可:
方式A:筛选数组判断
- 添加动作:
筛选数组 - 配置:
- 从:选择上一步
获取行(V2)的输出(body/value) - 条件:设置为
item()?['<<Status_ID列的ID字段>>']不等于1- 替换
<<Status_ID列的ID字段>>为Sub-tasks表中Status_ID lookup列对应的ID字段逻辑名称(比如statusid)
- 替换
- 从:选择上一步
- 添加
条件动作:- 左侧输入:
length(body('筛选数组')) - 运算符:
等于 - 右侧输入:
0 - 逻辑:若筛选出的“状态不为1的子任务”数量为0,说明所有子任务状态都是1
- 左侧输入:
方式B:计数对比判断
- 添加第一个
获取行计数(V2)动作:- 表:
Sub-tasks - 筛选行:和步骤3的筛选条件一致(统计该Task下的所有子任务总数)
- 表:
- 添加第二个
获取行计数(V2)动作:- 表:
Sub-tasks - 筛选行:
Task eq @{outputs('获取单个行_(V2)')?['body/<<Tasks表的主键列名>>']} and Status_ID eq 1
- 表:
- 添加
条件动作:- 左侧输入:第一个计数的输出(
body/value) - 运算符:
等于 - 右侧输入:第二个计数的输出(
body/value) - 逻辑:总子任务数等于状态为1的子任务数,说明全满足条件
- 左侧输入:第一个计数的输出(
步骤5:更新对应Project的状态为“Done”
- 在条件的
如果是分支中,添加动作:获取单个行(V2)(Dataverse连接器)- 表:
Projects - 行ID:选择步骤2中获取的Task记录里的Project lookup列对应的ID值
- 表:
- 再添加动作:
更新行(V2)(Dataverse连接器)- 表:
Projects - 行ID:选择上一步获取的Project的ID值
- 找到Project的状态列,设置值为
Done
- 表:
注意事项
- Dataverse列的逻辑名称可能和显示名称不同,配置时要确保选对字段(可在Dataverse表的列详情中查看“逻辑名称”)
- 测试时可手动修改Sub-tasks的Status_ID为1,验证流是否触发并正确更新Project状态
- 若Sub-tasks数量较多,可优化筛选条件或添加并行分支,提升流的运行效率
内容的提问来源于stack exchange,提问作者Adham Nawito
相关产品推荐
相关产品推荐

