商业版功能—— 本实例的 Business 方案已包含。如需自托管此功能,需要商业许可。 许可说明 →

工作流

Paid

在画布上构建自动化:一个触发器、若干条件,以及执行动作的步骤;每次触发都会在运行历史中逐步记录。

工作流响应 Carbon 事件,评估条件并运行动作。例如:销售订单分派后通知客户经理,生产订单被暂扣时创建问题,或在发货过账后调用外部服务。在自动化 → 工作流中构建工作流:把一个触发器连接到条件和动作卡片,然后选择 "Publish"(发布)。一个触发器可以分叉到多个分支。Carbon 会在运行与历史中记录每次执行。

一个触发器,分叉到各自以不同方式结束的分支。

什么启动工作流

每个工作流恰好有一个触发器步骤,它有两种工作方式。"Trigger type"(触发类型) 开关在 "Event"(事件) 和 "Schedule"(计划) 之间选择;选择其一会清除另一个。

事件。 事件是对特定记录的特定更改:

形式示例你得到什么
创建job.created新记录
删除purchaseOrder.deleted记录删除前的状态
某列变更customer.assignee.changed记录及其 before 和 after 值
NOTE

没有通用的「已更新」事件

你选择关心的确切字段。可监视十种记录类型——采购订单、销售订单、生产订单、物料、收货、发货、报价单、供应商、客户和问题——每种都有自己的一小列可监视字段。无人监视的字段发生变更不会启动任何东西。

业务时点。 在按记录的事件下方,选择器有一组 "Business moments"(业务时点):Carbon 自身流程中九个有意义的完成点——生产订单下达或暂扣、工单工序完成、报价发送或接受、收货或发货过账、销售或采购发票过账。业务时点交给工作流的是每条记录的身份,而不是字段副本;需要读取时点未命名的内容时,添加查找步骤。

计划。 在 "Schedule" 模式下,你选择 "Frequency"(频率):每天、每周或每月,适用日期、"Time of day"(当日时间)和"Timezone"(时区);更改时构建器会显示实时的 "Next fires at:"(下次触发) 行。

HEADS UP

计划从不补跑

Carbon 分别存储墙钟时间和时区,因此 09:00 在夏令时变化后仍是 09:00。每月 31 日的计划会跳过没有该日期的月份。中断后,Carbon 在下一个到期时间恢复,并把迟到超过一小时的运行记录为已跳过。最多五分钟的固定偏移用于分散负载,因此 09:00 的计划会在 09:00 到 09:05 之间运行。

"Triggered by"(触发者)。 事件触发器还要选择谁导致了变更:"People"(人员)、"Workflows"(工作流) 或 "Both"(两者)。新触发器从 "People" 开始,这是安全的答案:它阻止工作流响应工作流(包括自身)所做的编辑。当你希望一个自动化驱动另一个时,才刻意切换到 "Both"。

可以添加的步骤

六种,按组件面板顺序:

步骤作用
触发器启动工作流。每个工作流一个,任何东西都不能连接到它。
条件把运行导向一条路径。每条路径是一组子句,可带 "Otherwise"(否则)。
动作执行工作——通知、创建、更新或调用外部。有独立的成功和失败句柄。
计算从记录计算出数字,例如订单总额或报废率。只读。
查找查找记录,以便后续步骤使用。
筛选只保留列表中匹配规则的项目。

动作分三类。四种创建记录(生产订单、问题、采购订单或销售订单),每种都通过 Carbon 自身界面所用的同一服务,因此编号序列、默认值和必填字段行为完全一致。十种更新现有记录,每种可监视的记录类型一个。最后两种是 "Notify someone"(通知某人) 和 "Call an outside URL"(调用外部 URL)。

NOTE

更新刻意收窄

更新步骤只能设置 Carbon 为该记录列出的字段:负责人、交期、参考号、优先级。状态不能由工作流写入,也没有任何形式的删除动作。工作流能监视的字段与能写入的字段是两份不同的列表。

填写步骤

大多数字段接受你输入的值或来自更早步骤的值。在文本字段中输入 { 会打开菜单,列出此步骤之前的步骤、它们的输出以及最多两级属性。只提供保证已在本步骤之前运行的步骤——条件另一侧的值不在菜单中,引用它会在发布时被拒绝。

重复步骤。 把列表连接到单值字段会让该步骤对每个项目运行一次,最多 100 个项目。表单会显示这一行为。把两个列表连接到一个步骤会导致发布时错误,因为循环来源不明确。

调用外部 URL

"Call an outside URL" 动作发送 HTTP 请求,即,让其他系统响应 Carbon 中的事件。

字段类型
要调用的 https 地址。允许变量,因此地址可以包含记录 ID。
GET、POST、PUT、PATCH 或 DELETE。新步骤从 GET 开始。
随请求发送的额外信息,例如授权密钥。值可以包含变量,每个请求头的值都会在运行历史中掩码。
请求负载,变量会被替换。仅对 POST、PUT 和 PATCH 显示并发送。
HEADS UP

Webhook 步骤拒绝做什么

纯 http 会被拒绝,任何解析到私有或链路本地网络的地址也一样,包括 localhost 和云元数据端点。不跟随重定向,调用十秒后放弃,任何非成功状态的响应都会使步骤失败。有八个请求头由 Carbon 设置且不能覆盖。Carbon 不对请求签名——如果接收系统需要验证调用方,请在请求头中给它一个共享密钥。

保存、发布与版本

没有保存按钮:构建器在你工作时自动保存,并在标题旁显示 "Saving…"(保存中)、"Saved"(已保存) 或 "Could not save"(无法保存)。半成品草稿可以正常保存;发布前不会做任何检查。

"Publish"(发布) 是全有或全无的。Carbon 会校验整个工作流——存在触发器、没有步骤回环、每个必填字段已填、每个变量都能解析且来自上游——任何问题都不会写入;问题显示在面板中,点击某项会把画布平移到出问题的步骤。发布也是唯一的开关:你发布的版本就是运行的版本,"Unpublish"(取消发布) 会完全停止工作流。不会删除任何内容,因此再次发布会重新启动。没有已发布版本的工作流显示为草稿。

发布会冻结该版本。要继续工作,请使用版本菜单创建新版本,它会复制已发布版本并把版本号加一。即使你在运行中途发布了另一个版本,已在进行的运行仍使用它开始时所用的版本。触发器卡片还有 "Test run"(测试运行) 按钮(仅所有者):它真实执行,但结果不会写入运行历史。

谁可以做什么

工作流有自己的权限模块:View(查看) 打开列表、构建器和运行历史;Create(创建) 添加工作流和版本;Update(更新) 编辑、发布和测试运行;Delete(删除) 连同版本和历史删除工作流。每条路由还要求员工账户。

NOTE

工作流以所有者身份运行,而不是触发者

每个步骤都以所有者的权限读写,并在每一步重新检查。如果所有者的访问被撤销,运行会停止,并用一条指明区域的消息说明。工作流所做的任何事都无法触及其所属公司之外——运行历史在数据库本身中就是只读的,因此任何用户,无论权限多高,都无法编辑或伪造运行日志。

运行与历史

每次触发都记录为一次工作流运行:运行一行,每个步骤一行,包含输入值、输出值以及结束原因。打开自动化 → 运行查看列表:状态、工作流、触发器、起始记录(按名称或编号显示,并可链接打开)、时长、所有者,以及当运行由另一次运行引起时显示 "Hop 2"(第 2 跳) 的链单元格。任何排队或运行中的行都会实时更新。

结果一句话是理解一次运行最快的方式。
偏轨状态
成功
所有执行的步骤都无错误完成。

点击一行打开 "Run Details"(运行详情) 抽屉,显示一句话的通俗结果("Failed at 'notify the buyer': The address answered 500."(在「通知采购员」处失败:该地址返回 500。))。下方步骤按工作流顺序而非执行顺序显示,因此从未运行的步骤仍占其位置,灰显并标记为 "Not reached"(未到达) 或带原因跳过。展开步骤可查看输入、输出,条件步骤还会显示逐子句的原因及所走路径。重复步骤记录每个项目,并附带实际执行数量的摘要("Ran 100 of 150; 50 were not used"(执行了 150 中的 100;50 未使用) 表示 100 项上限,不是错误)。

NOTE

运行可以成功但什么都没做

如果条件不匹配任何路径且没有 "Otherwise",该步骤成功——它正确地决定不继续。运行以成功结束,大多数步骤从未到达,因此结果句子会说明发生了什么,而不是让你看绿色标记。缺少数据同样是跳过而非失败,值无法读取的条件不会落入 "Otherwise":未知不等于否。

失败步骤会停止其分支而非整个运行:其他分支继续,连接的失败句柄会被执行,尽管运行最终仍标记为失败。唯一例外是权限失败,即使存在失败路径也会直接停止分支。

链。 当一个工作流的写入触发另一个工作流时,Carbon 会链接这些运行并显示完整链。重复的工作流或超过十跳的链会记录一次已阻止运行。使用 "Triggered by"限制哪些变更可以启动工作流。

HEADS UP

没有重试按钮

已完成的运行不能从运行页面重新运行。修复外部原因并让下一个触发器触发,或使用构建器的 "Test run"。中途崩溃的运行会由队列自动重试,且由于每个步骤在执行前先被领取,重试不会重复已完成的工作。

保留期。 每夜任务分四轮清理历史,忽略仍在进行的运行:24 小时后,仍排队或运行中的运行以失败关闭;7 天后,记录的值原地汇总;30 天后,步骤行被删除(运行保留);90 天后,运行被完全删除。名称看起来像凭证的值存储为 [REDACTED],每个 Webhook 请求头值都会掩码,而仅仅听起来敏感的普通字段(物料键、谁批准了什么)保持不变:隐藏太多的调试工具和隐藏太少的工具一样坏。

相关内容