Power Automate 触发条件公式速查表:即用示例(工作时间 & 邮件过滤)
Source: Dev.to
请提供您希望翻译的具体文本内容(文章正文),我将为您翻译成简体中文并保留原有的格式、Markdown 语法以及代码块和 URL。谢谢!
触发条件
Power Automate 触发条件让您指定触发器何时应触发。在新设计器中,它们位于 Settings 选项卡下;在经典设计器中位于 Settings 菜单下。语法与 高级模式 下的 “Filter array” 操作相同。
使用触发条件可在条件不满足时完全阻止流程执行,从而降低运行次数和资源消耗。
日期和时间
日期和时间公式最常与 Scheduled 触发器一起使用。
// Example: add 9 hours to UTC now (adjust for your time zone)
addHours(utcNow(), 9)
星期几
这些公式对于只在工作日、周末或特定日期运行的流程非常实用。
// Only run from Monday to Friday
@and(
greaterOrEquals(dayOfWeek(addHours(utcNow(), 9)), 1),
lessOrEquals(dayOfWeek(addHours(utcNow(), 9)), 5)
)
// Only run on Saturday and Sunday
@or(
equals(dayOfWeek(addHours(utcNow(), 9)), 0),
equals(dayOfWeek(addHours(utcNow(), 9)), 6)
)
// Only run on a specific day (Wednesday)
@equals(dayOfWeek(addHours(utcNow(), 9)), 3)
dayOfWeek 的结果:星期日 = 0,星期一 = 1,星期二 = 2,星期三 = 3,星期四 = 4,星期五 = 5,星期六 = 6。
注意: 公共假期在触发条件中难以处理;它们通常在流程内部进行过滤。
时间
使用这些公式将执行限制在工作时间内或工作时间外。
// Within business hours (09:00 – 18:00)
@and(
greaterOrEquals(addHours(utcNow(), 9, 'HH:mm'), '09:00'),
lessOrEquals(addHours(utcNow(), 9, 'HH:mm'), '18:00')
)
// Outside business hours
@or(
less(addHours(utcNow(), 9, 'HH:mm'), '08:00'),
greater(addHours(utcNow(), 9, 'HH:mm'), '18:00')
)
时间字符串必须使用带前导零的24小时制。
Outlook
针对基于电子邮件的流的触发条件。
// Only trigger for a specific sender
@equals(triggerOutputs()?['body/from'], 'sample@example.com')
// Multiple specific senders
@or(
equals(triggerOutputs()?['body/from'], 'sample1@example.com'),
equals(triggerOutputs()?['body/from'], 'sample2@example.com')
)
// Only trigger for a specific domain
@endsWith(toLower(triggerOutputs()?['body/from']), '@example.com')
// Multiple domains
@or(
endsWith(toLower(triggerOutputs()?['body/from']), '@example.com'),
endsWith(toLower(triggerOutputs()?['body/from']), '@example.org')
)
// Subject contains a keyword (e.g., "invoice")
@contains(triggerOutputs()?['body/subject'], 'invoice')
SharePoint 与 OneDrive
将基于文件的触发器限制为特定的扩展名或文件名模式。
// Only for .pdf files
@endsWith(toLower(triggerOutputs()?['body/{FilenameWithExtension}']), '.pdf')
// Filename contains specific text (e.g., "invoice")
@contains(triggerOutputs()?['body/{FilenameWithExtension}'], 'invoice')
测试
一种快速验证每个条件的方法是使用每分钟运行一次的 Scheduled 触发器,并观察流程是否触发。
| 场景 | 测试设置 | 预期结果 |
|---|---|---|
| 仅工作日 | 使用 “Monday‑to‑Friday” 条件 | 流程在周一至周五运行,周六、周日不运行 |
| 仅周末 | 使用 “Saturday‑and‑Sunday” 条件 | 流程在周六、周日运行,工作日不运行 |
| 工作时间 | 使用 “09:00‑18:00” 条件 | 流程在 09:00 到 18:00 之间运行(本地调整时间) |
| 非工作时间 | 使用 “outside hours” 条件 | 流程在 09:00 前或 18:00 后运行 |
| 特定发件人 | 使用发件人条件 sample@example.com | 仅当收到来自该地址的邮件时触发流程 |
| 特定域 | 使用域条件 @example.com | 仅当邮件来自该域时触发流程 |
| 文件扩展名 | 在 SharePoint “When a file is created” 触发器上使用 .pdf 条件 | 仅当上传 PDF 时触发流程 |
| 文件名包含 | 在相同触发器上使用 invoice 条件 | 仅当文件名包含 “invoice” 时触发流程 |
在测试时,您可能会注意到保存流程后有一分钟的延迟;这是正常的,因为触发条件在流程持久化后才会被评估。