自动化流程的意思是“当这类记录发生这件事时,按顺序执行这些操作”,无需编写代码。你选择一个触发器,用条件缩小范围,然后添加一系列步骤:更新字段、发送通知、分配人员、调用 webhook、等待两天、根据某个值分支。
何时使用自动化流程
Frappe 已经为常见任务提供了单一用途的工具,当其中某个工具正好满足你的需求时,它仍然是正确的选择:
| 你想要… | 使用 |
|---|---|
| 在某个事件发生时发送一封邮件或系统通知 | 通知 |
| 在某个事件发生时将文档提交到外部 URL | Webhook |
| 在团队中分配新文档 | 分配规则 |
| 用代码更改文档的行为 | 服务器脚本 |
当你需要这些工具单独无法完成的事情时,请使用自动化流程:
- 按顺序执行多个步骤:分配文档,然后给被分配人发邮件,然后创建一个后续任务。
- 等待:做某件事,等待两天,然后再做另一件事,或者等到另一个事件发生。
- 分支:如果交易金额超过 10,000,就做一件事,否则做另一件事。
- 访问关联记录:触发器是一条 Communication,但你想更新的记录是它所属的 Lead。
工作原理
- 触发器:文档事件、日期、计划、来自应用的自定义事件或手动运行会启动流程。请参阅触发器和条件。
- 匹配:流程的匹配字段和条件决定此文档是否符合条件。
- 排队:匹配的触发器会被排队,而不是内联执行。后台工作进程会在请求提交后不久处理它,因此缓慢的 webhook 永远不会阻塞用户的保存操作。在工作进程运行之前,对同一文档的重复保存会合并为一次运行。
- 运行:工作进程按顺序执行步骤,并写入一条自动化运行记录,其中包含每个步骤的结果。请参阅步骤和操作。
由于运行发生在后台,因此调度器和后台工作进程必须正在运行,自动化才会触发。
创建流程
- 在 awesome bar 中转到自动化流程,然后点击新建。
- 输入标题,并选择流程所涉及的文档类型。
- 选择触发器类型,并填写它要求的字段。
- 可选地添加匹配字段和使用 Python 的高级表达式。
- 在操作下添加一行或多行。
- 保存并点击测试运行,针对真实文档进行尝试(所有更改都会回滚),然后勾选已启用并再次保存。
流程只有在至少有一个操作时才能启用。
示例:跟进高价值线索
- 文档类型:Lead
- 触发器类型:文档创建
- 匹配字段:年收入 > 1,000,000
- 操作:
- 分配给用户:
sales-head@example.com - 发送通知:电子邮件发送至
sales-head@example.com,主题为New lead: {{ doc.lead_name }} - 等待:2 天
- 发送通知:发送邮件至
@assignees,主题为Follow up on {{ doc.lead_name }},并附带一个步骤条件doc.status == "Lead",这样如果已经有人推进了该线索,就会跳过此步骤。
- 分配给用户:
运行历史
每次运行都会保存为一条自动化运行记录,该记录会关联到对应的流程以及它所运行的文档。每次运行都有一个状态:
- 成功:每个步骤都成功执行或被跳过。
- 部分失败:某个步骤失败,且出错时停止处于关闭状态,因此后续步骤仍会继续运行。
- 失败:某个步骤失败,且
Stop on Error停止了运行,或者运行无法启动。 - 等待中:运行在
Wait step处暂停,并会自动恢复。 - 已跳过:当
Revalidate on Run开启时,文档已被删除或不再匹配。
打开一次运行,可以查看每个步骤的状态、输出、耗时,对于失败的步骤,还可以查看错误信息和堆栈跟踪。对于被跳过的步骤,运行记录会显示条件及其读取到的值,这样你就能看出它为什么没有匹配。运行日志会按照标准日志清理机制在 30 天后清除。
自动化设置
自动化设置包含站点范围的开关和限制:
- 禁用自动化:停止在站点上派发所有流程。已排队的记录不受影响。若要在数据库不可达时也停止自动化,请在
site_config.json中设置"automation_disabled": 1。 - 最大递归深度(默认 3):一个流程的操作可以触发另一个流程多少次,超过后该链条将被拒绝。这可以防止两个相互更新的流程无限循环。
- 失败阈值(默认 10):在连续这么多次运行失败后,该流程会被自动禁用,其待处理的运行会被跳过,并且其所有者会收到通知。原因会显示在该流程的禁用原因字段中。
- 允许未注册事件:接受没有任何已安装应用注册的自定义事件。请参阅扩展自动化。
其余设置(排空时机、重试、保留期限和大小限制)用于调整后台工作进程,通常很少需要更改。
后续步骤
- 触发器与条件
- 步骤与操作
- 扩展自动化(面向应用开发者)