Power Automate 循环触发器:如何实现每月最后5个工作日触发流程
Power Automate 每月最后5个工作日运行方案
你可以直接基于原有查找最后1个工作日的逻辑调整,无需复杂改动,适配所有特殊月份,方案如下:
核心优化逻辑
原有逻辑是找到1个月末工作日就停止,现在改成找到5个月末工作日再停止,最后判断当日是否属于这5个工作日即可。
具体操作步骤
- 触发规则保持每日定时触发不变
- 初始化4个变量:
当前日期:类型为字符串,值为你所在时区的当日日期,国内用户可用表达式convertTimeZone(utcNow(), 'UTC', 'China Standard Time', 'yyyy-MM-dd')倒推日期:类型为日期,初始值为下月第一天,表达式为startOfMonth(addToTime(variables('当前日期'), 1, 'Month'))工作日计数:类型为整数,初始值为0月末工作日列表:类型为数组,初始值为空
- 添加「DO UNTIL」循环,设置终止条件为
工作日计数 等于 5 - 循环内第一步:更新
倒推日期为当前值减1天,表达式:addDays(variables('倒推日期'), -1, 'yyyy-MM-dd') - 循环内添加判断条件:
dayOfWeek(variables('倒推日期')) 不等于 0且dayOfWeek(variables('倒推日期')) 不等于 6,排除周六周日- 条件成立:将当前
倒推日期加入月末工作日列表,同时将工作日计数加1 - 条件不成立:不做任何操作,进入下一轮循环
- 条件成立:将当前
- 循环结束后,添加判断条件:
当前日期 包含在 月末工作日列表中- 条件成立:执行你的业务逻辑
- 条件不成立:直接结束流程
你现有测试方案的问题修正
你目前的方案设置的循环终止条件、日期校验逻辑冗余,调整2点即可正常运行:
- 把DO UNTIL终止条件从
varCounter = 7改成已匹配的工作日数量 = 5,不需要固定循环7次 - 无需在循环内校验是否为当日,先收集齐5个月末工作日再统一判断,逻辑更清晰,不容易出错
用到的核心表达式参考
// 国内时区当日日期 convertTimeZone(utcNow(), 'UTC', 'China Standard Time', 'yyyy-MM-dd') // 获取下月第一天 startOfMonth(addToTime(variables('当前日期'), 1, 'Month')) // 工作日判断 @and(not(equals(dayOfWeek(variables('倒推日期')), 0)), not(equals(dayOfWeek(variables('倒推日期')), 6)))
内容的提问来源于stack exchange,提问作者Soben
相关产品推荐
相关产品推荐

