自动化

自动化流程的意思是“当这类记录发生这件事时,按顺序执行这些操作”,无需编写代码。你选择一个触发器,用条件缩小范围,然后添加一系列步骤:更新字段、发送通知、分配人员、调用 webhook、等待两天、根据某个值分支。

何时使用自动化流程

Frappe 已经为常见任务提供了单一用途的工具,当其中某个工具正好满足你的需求时,它仍然是正确的选择:

你想要… 使用
在某个事件发生时发送一封邮件或系统通知 通知
在某个事件发生时将文档提交到外部 URL Webhook
在团队中分配新文档 分配规则
用代码更改文档的行为 服务器脚本

当你需要这些工具单独无法完成的事情时,请使用自动化流程:

  • 按顺序执行多个步骤:分配文档,然后给被分配人发邮件,然后创建一个后续任务。
  • 等待:做某件事,等待两天,然后再做另一件事,或者等到另一个事件发生。
  • 分支:如果交易金额超过 10,000,就做一件事,否则做另一件事。
  • 访问关联记录:触发器是一条 Communication,但你想更新的记录是它所属的 Lead。

工作原理

  1. 触发器:文档事件、日期、计划、来自应用的自定义事件或手动运行会启动流程。请参阅触发器和条件。
  2. 匹配:流程的匹配字段和条件决定此文档是否符合条件。
  3. 排队:匹配的触发器会被排队,而不是内联执行。后台工作进程会在请求提交后不久处理它,因此缓慢的 webhook 永远不会阻塞用户的保存操作。在工作进程运行之前,对同一文档的重复保存会合并为一次运行。
  4. 运行:工作进程按顺序执行步骤,并写入一条自动化运行记录,其中包含每个步骤的结果。请参阅步骤和操作。

由于运行发生在后台,因此调度器和后台工作进程必须正在运行,自动化才会触发。

创建流程

  1. 在 awesome bar 中转到自动化流程,然后点击新建。
  2. 输入标题,并选择流程所涉及的文档类型。
  3. 选择触发器类型,并填写它要求的字段。
  4. 可选地添加匹配字段和使用 Python 的高级表达式。
  5. 在操作下添加一行或多行。
  6. 保存并点击测试运行,针对真实文档进行尝试(所有更改都会回滚),然后勾选已启用并再次保存。

流程只有在至少有一个操作时才能启用。

示例:跟进高价值线索

  • 文档类型:Lead
  • 触发器类型:文档创建
  • 匹配字段:年收入 > 1,000,000
  • 操作:
    1. 分配给用户:sales-head@example.com
    2. 发送通知:电子邮件发送至 sales-head@example.com,主题为 New lead: {{ doc.lead_name }}
    3. 等待:2 天
    4. 发送通知:发送邮件至 @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):在连续这么多次运行失败后,该流程会被自动禁用,其待处理的运行会被跳过,并且其所有者会收到通知。原因会显示在该流程的禁用原因字段中。
  • 允许未注册事件:接受没有任何已安装应用注册的自定义事件。请参阅扩展自动化。

其余设置(排空时机、重试、保留期限和大小限制)用于调整后台工作进程,通常很少需要更改。

后续步骤

  • 触发器与条件
  • 步骤与操作
  • 扩展自动化(面向应用开发者)