触发器组件与运行机制
触发器触发后执行的编排流程可用的组件,以及运行时的校验与限制。
概述
触发器的编排画布与平台接口画布使用同一套流程引擎和组件,但只开放一部分节点:触发器用于自动执行,不允许包含脚本、调试、异步、发起审批等功能节点。
编排入口:在触发器编排页从左侧组件面板拖拽节点到画布,连线后点击「保存并发布」生效。画布固定包含唯一的「触发开始」入口与「结束」节点。每个节点的属性配置方式与平台接口一致,可参照对应组件文档。
配置项
| 配置项 | 说明 |
|---|---|
| 组件面板 | 按「基础组件 / 数据组件 / 流程控制 / 通知」分类展示可用节点 |
| 画布节点 | 拖拽添加,连线编排执行顺序 |
| 节点属性 | 选中节点后在右 侧属性区配置 |
| 节点启用 / 停用 | 节点可被停用,运行到该节点时被跳过 |
| 触发条件 | 编排页顶部的全局配置,见 触发条件 |
| 保存并发布 | 保存画布并发布;每次生成一个新版本,可切换查看历史版本 |
| 取消发布 | 取消后触发器不再执行,编排保留 |
| 执行日志 | 查看每次执行的逐节点明细 |
可用组件
触发器编排允许以下组件,各类节点的详细属性请点击进入平台接口对应组件文档。
基础组件
| 节点 | 说明 | 文档 |
|---|---|---|
| 触发开始 | 触发链路的唯一入口,声明流程从触发器开始 | 见下方「触发开始节点」 |
| 结束 | 流程终点 | 结束组件 |
数据组件
| 节点 | 说明 | 文档 |
|---|---|---|
| 字段赋值 | 临时改变节点内字段值,不持久化数据 | 字段赋值组件 |
| 数据写入 | 向实体对象创建新记录 | 数据写入组件 |
| 数据更新 | 更新实体对象的数据 | 数据更新组件 |
| 逻辑删除 | 逻辑删除数据(保留记录) | 逻辑删除组件 |
| 真删除 | 物理删除数据 | 真删除组件 |
| 查询集合 | 按条件查询记录集合 | 查询集合组件 |
| 查询单条 | 按条件查询单条记录 | 查询单条组件 |
| 查询数量 | 查询满足条件的记录数 | 查询Count组件 |
流程控制
| 节点 | 说明 | 文档 |
|---|---|---|
| 条件分支 | 按条件进入不同分支 | 条件组件 |
通知
| 节点 | 说明 | 文档 |
|---|---|---|
| 消息通知 | 发送站内消息、待办等通知 | 消息通知组件 |
调试、异步任务、C# 脚本、JSON 脚本、服务 API 调用、发起审批流、自定义响应等高级节点不允许出现在触发器画布中,服务端在发布时会拒绝。
触发开始节点
「触发开始」是触发链路的唯一入口,元数据类型为 TriggerStart:
| 属性 | 说明 |
|---|---|
| 节点标题 | 触发开始 |
| 副标题 | 逻辑开始 |
| 属性配置 | 与平台接口「开始组件」一致,无可编辑的额外属性 |
「触发开始」与「结束」属于流程引擎的固定节点:不可被停用,也不能插入到已有连线中间。触发器画布必须且只能有一个「触发开始」。
执行日志
执行日志入口在编排页工具栏与列表页操作列 。日志按触发器分页展示,展开任意一条可查看该次执行的逐节点明细时间线。
| 列 | 说明 |
|---|---|
| 状态 | 成功 / 失败 |
| 触发动作 | Add / Update / Delete |
| 数据 Id | 被变更数据的 Id |
| 触发跳数 | 该次执行的触发深度 |
| 耗时 | 本次执行耗时(秒) |
| 触发时间 | 本次执行开始时间 |
逐节点明细按节点执行顺序展示(最新在上),每个节点记录节点 Id、节点类型、状态与耗时;失败节点区分「自身失败」与「下游节点失败」,整体失败信息展示在明细上方。
运行机制与限制
| 机制 | 说明 |
|---|---|
| 异步执行 | 数据变更落库、审计行落库后,由后台消费服务匹配并执行触发器 |
| 触发匹配 | 按触发对象与触发动作匹配 Status = Published 的触发器,再评估触发条件 |
| 跳数上限 | 触发深度上限为 2:允许一级级联,达到上限的变更不再触发,用于防止级联循环 |
| 熔断保护 | 同一触发器 + 同一数据 Id 在 60 秒内执行达到 5 次即熔断,冷却 10 分钟后自动恢复 |
| 熔断表现 | 熔断期间执行被静默跳过,不写执行日志、不更新上次执行信息;首次熔断会写入一条失败日志 |
| 载荷注入 | 执行时向流程注入数据变更载荷(数据 Id、对象 Id / 编码、动作、变更 前 / 后快照、跳数) |
| 权限旁路 | 触发器执行时跳过操作权限与 MOU 数据权限校验 |
下一步
编排与执行的技术结构
以下内容面向技术实现与 AI 检索。
节点类型标识
流程节点通过 type 标识,触发器允许的类型如下:
| 节点类型(type) | 界面名称 | 分类 |
|---|---|---|
TriggerStart | 触发开始 | 基础组件 |
End | 结束 | 基础组件 |
DbBatchUpdateField | 字段赋值 | 数据组件 |
DbInsert | 数据写入 | 数据组件 |
DbUpdate | 数据更新 | 数据组件 |
DbLogicDelete | 逻辑删除 | 数据组件 |
DbDelete | 真删除 | 数据组件 |
DbQueryList | 查询集合 | 数据组件 |
DbQuerySingle | 查询单条 | 数据组件 |
DbQueryCount | 查询数量 | 数据组件 |
FlowCondition | 条件分支 | 流程控制 |
Notification | 消息通知 | 通知 |
固定节点类型(不可停用、不可插入到连线中间):TriggerStart、End。
触发载荷结构
执行时注入流程的载荷 TriggerPayload:
| 属性名 | 类型 | 含义 |
|---|---|---|
DataChangeLogId | string | 落库的变更审计日志 Id,未审计时为空 |
MetaObjectCode | string | 触发对象编码 |
MetaObjectId | string | 触发对象 Id |
Action | string | 触发动作:Add / Update / Delete |
Before | ObjectData | 变更前快照,可能为 null |
After | ObjectData | 变更后快照,可能为 null |
DataId | string | 被变更数据 Id |
TriggerDepth | int | 本次跳数,1 为直接业务写入,2 为一级级联 |
执行日志结构
执行日志实体 MetaTriggerRunLog(表 system_metatriggerrunlog):
| 属性名 | 类型 | 含义 |
|---|---|---|
MetaTriggerId | string | 触发器 Id |
VersionId | string | 执行时使用的编排版本 Id |
DataChangeLogId | string | 变更审计日志 Id |
MetaObjectCode | string | 触发对象编码(冗余,便于列表展示与过滤) |
Action | string | 触发动作 |
TriggerDepth | int | 触发跳数 |
DataId | string | 被变更数据 Id |
NodeDetails | string | 逐节点执行明细 JSON 数组 |
StartTime / EndTime | datetime | 开始 / 结束时间(UTC) |
ConsumptionSeconds | double | 执行耗时(秒) |
Status | ExecuteStatusEnum | 执行结果:Success=1 / Failure=2 |
ErrorMessage | string | 失败时的错误信息 |
NodeDetails 明细项结构 MetaTriggerRunNodeDetail:
| 属性名 | 类型 | 含义 |
|---|---|---|
NodeId | string | 节点 Id |
Type | string | 节点类型 |
Status | number | 节点执行状态:1 成功,其余为失败 |
Milliseconds | number | 节点耗时(毫秒) |
Error | string | 节点错误信息 |
IsPropagated | bool | 失败是否由下游节点传播而来(嵌套执行下祖先节点会重新抛出下游异常) |
运行限制常量
// 触发深度上限:允许一级级联,循环链在深度上限处被硬性截断
MaxTriggerDepth = 2;
// 熔断检测窗口(秒):窗口内同一 (MetaTriggerId, DataId) 执行达到阈值即熔断
TriggerBreakerWindowSeconds = 60;
// 熔断阈值:检测窗口内同一 (MetaTriggerId, DataId) 的最大执行次数
TriggerBreakerThreshold = 5;
// 熔断冷却时长(分钟):熔断标记缓存 TTL,到期自动恢复
TriggerBreakerSuspendMinutes = 10;
发布校验
发布编排(SaveAndPublish)时会校验:
- 画布中每个节点都必须属于触发器允许的组件基类(白名单);
- 画布必须存在唯一的「触发开始」入口;
- 触发器至少勾选一个触发类型;
- 未勾选「数据修改时」时触发条件必须为空。
校验不通过时发布失败并返回对应错误提示。