Power Automate 触发条件公式速查表:即用示例(工作时间 & 邮件过滤)

发布: (2025年12月25日 GMT+8 21:08)
5 min read
原文: Dev.to

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” 时触发流程

在测试时,您可能会注意到保存流程后有一分钟的延迟;这是正常的,因为触发条件在流程持久化后才会被评估。

Back to Blog

相关文章

阅读更多 »

我抓取了6000+ n8n 工作流,并构建了一个带交互式预览的搜索引擎

我遇到的主要问题是,在使用官方模板库和各种社区资源时,总会卡在一个特定的摩擦点上:我必须下载一个 JSON 文件,将其导入到我的项目中,然后才能继续使用模板。然而,这个过程非常繁琐,而且经常出现以下几个具体障碍: 1. **文件获取不便** 官方文档只提供了一个下载链接,但该链接经常失效或被防火墙拦截。社区的替代方案要么已经过时,要么缺少必要的更新,导致我下载的 JSON 文件与当前的模板版本不匹配。 2. **导入步骤不明确** 即使成功下载了 JSON,我也不清楚该如何在项目中正确导入。官方示例代码往往省略了关键的配置步骤,或者使用了旧版的 API,使得我在尝试时频繁遇到 “未定义” 或 “类型不匹配” 的错误。 3. **依赖冲突** 在将 JSON 文件加入项目后,构建工具(如 webpack、vite 等)会报错,提示某些依赖版本不兼容。社区的解决方案大多是手动降级或升级某些库,但这会导致其他功能出现连锁反应,尤其是在使用 TypeScript 时,类型定义会出现大量冲突。 4. **缺乏自动化脚本** 官方并没有提供一键下载并集成 JSON 的脚本,导致每次都需要手动执行 curl/wget、解压、移动文件等步骤。社区有一些 Gulp/Grunt 插件,但它们的维护状态不佳,文档也不完整。 5. **文档与实际行为不一致** 官方文档中描述的 JSON 结构与实际下载的文件存在细微差别,例如字段名的大小写、嵌套层级或必填字段的缺失。这使得在代码中解析 JSON 时,需要额外的适配层,增加了维护成本。 **尝试的解决方案** - **使用代理或 VPN**:通过代理访问官方下载链接,暂时解决了网络拦截的问题,但这并不是根本方案,因为每次切换网络环境都需要重新配置。 - **手动克隆仓库**:直接从 GitHub 上克隆包含 JSON 的仓库,避免了下载链接失效的问题。但这仍然需要手动将文件复制到项目的指定目录,并确保路径配置正确。 - **编写自定义脚本**:利用 Node.js 编写一个小脚本,自动下载、校验并移动 JSON 文件到目标位置。虽然实现了自动化,但仍然依赖于外部网络资源的可用性。 - **社区 Fork**:寻找活跃的社区 Fork,使用其提供的更新版 JSON。此方案在短期内有效,但长期来看仍然面临维护者停止更新的风险。 **当前的痛点** - 每次新建项目或升级模板时,都必须重复上述繁琐步骤,导致开发效率大幅下降。 - 由于依赖冲突和类型不匹配,项目的 CI/CD 流水线经常卡在构建阶段,需要额外的人工干预。 - 文档不完整,使得新人难以快速上手,增加了学习成本。 **期望的改进** 1. **提供稳定的 CDN 或 npm 包**,直接通过 `npm install @official/template-data` 或类似方式获取最新的 JSON,省去手动下载环节。 2. **在官方文档中加入完整的导入示例**,包括 TypeScript 类型声明、Webpack/Vite 配置示例,以及常见错误的排查步骤。 3. **维护一个自动化脚本或 CLI 工具**,一键完成下载、校验、集成的全过程,并在脚本中处理依赖冲突和版本兼容性。 4. **同步更新 JSON 结构文档**,确保字段说明、必填项和示例数据与实际文件保持一致,减少二次适配的工作量。 5. **建立社区维护的镜像仓库**,在国内网络环境下也能快速获取最新的 JSON 文件,避免因网络问题导致的下载失败。 通过上述改进,能够显著降低模板使用的门槛,提高开发效率,并为新手提供更友好的上手体验。

2026年我想学习的3件事

n8n 这个工具已经被一些开发者 YouTuber 多次介绍,激起了我的兴趣。它是一个 open-source workflow automation tool,采用 fair‑code licensed,功能强大……

Skills 正式加入 Codex

Agent Skills 让您能够通过任务特定的功能扩展 Codex。一个 skill 包含指令、资源和可选脚本,使 Codex 能够执行特定的…