跳到主要内容

触发器开始组件

触发器开始组件(TriggerStart)是对象触发器画布的入口节点,标识一条对象触发器流程的起点。

概念说明

本文档是 平台接口 组件说明的一部分。触发器画布与接口画布共用同一套流程引擎,区别在于场景与可用节点白名单。

概述​

对象触发器是以实体对象为触发源的一类流程,当对象数据发生变更(新增 / 更新 / 删除)时按配置触发。触发器画布(场景 MetaTrigger)的入口节点即触发器开始组件。

该节点属于引擎固定节点,不可删除、不可禁用,也不能插入到连线中间。它不包含额外业务配置,仅提供节点标识与通用属性。

触发器画布只允许白名单节点(数据操作、条件分支、消息通知等),不允许脚本类组件,服务端也会对画布进行校验。

配置项​

触发器开始组件没有专属业务配置项,仅提供见 全局属性 的节点通用属性:

配置项说明
节点名称显示在流程图上的名称,缺省为「触发开始」
节点描述节点的描述文本

使用说明​

提示
  • 一个对象触发器只允许存在一个触发器开始节点
  • 触发条件与触发时机的详细配置在对象触发器中维护
  • 触发器画布不支持「输出到最终结果」开关

下一步​

属性明细​

以下内容面向技术实现与 AI 检索,说明触发器开始组件的节点元数据。

节点元数据​

触发器开始组件由 FlowCmpType.TriggerStart 标识:

属性名类型含义取值/存储值
typestring组件类型固定为 "TriggerStart"
orderstring同级排序例:"1"

该节点为固定节点,不支持 IsDisabled(禁用)与 IsFinalResult(输出到最终结果)。

元数据存储示例​

{
"ID": "trigger-start",
"type": "TriggerStart",
"order": "1"
}

服务端执行逻辑​

触发器开始组件由 TriggerStartComponentManager 实现,继承 TriggerComponentManagerBase,组件类型为 FlowComponentTypeEnum.TriggerStart。

它本身不包含业务逻辑,职责有二:校验时定位唯一开始节点,执行时把已经注入上下文的触发载荷交给下游。触发载荷由触发器编排 TriggerComponentManagementApp.StartAsync 在进入画布前写入上下文。

元数据均为字符串

节点 meta 以 Dictionary<string, string> 存储;触发器开始组件不含专属业务配置,仅 type 与 order 等通用键。

执行时机与场景​

时机入口说明
保存 / 发布校验TriggerComponentManagementApp.VerifyFlowAsync校验画布全部节点在触发器白名单内,再由 _VerifyAsync 定位开始节点并校验下游
触发执行TriggerComponentManagementApp.StartAsync → _ExecuteAsync载荷注入上下文后,从开始节点进入画布

触发器上下文初始化(StartAsync)​

执行画布前,编排层向 context 注入触发上下文:

上下文项写入值来源
DicParam["BizDataIds"]payload.DataId变更数据 Id(复用数据组件的标准传参键)
DicParam["MetaObjectId"]payload.MetaObjectId触发对象 Id
DicParam["MetaObjectCode"]payload.MetaObjectCode触发对象编码
DicParam["TriggerNodeCollectorKey"]collector.Id节点执行收集器标识(触发器链路标记)
DicParam["SkipOperationPermission"]"true"触发器为后台任务,跳过操作权限校验
DicParam["SkipMouPermission"]"true"跳过 MOU 数据权限校验
SystemParampayload(TriggerPayload)弱类型参数,组件用 context.SystemParam as TriggerPayload 读取
CmpResult / TransferResultpayload.After 非空时写入变更后数据快照 List<ObjectData>供下游数据组件取用

TriggerPayload 字段:DataChangeLogId(审计日志 Id)、MetaObjectCode / MetaObjectId、Action(Add / Update / Delete)、Before / After(变更前后快照,可能为 null)、DataId、TriggerDepth(触发跳数,1 为直接业务写入)。

执行步骤​

_VerifyAsync:

  1. 查找所有 type == "TriggerStart" 的节点:为 0 抛 StartNodeNotFound,大于 1 抛 ProcessCanNotExistMultipleStartCmp。
  2. 以开始节点为 CurrentNode,执行 VerifyNextAsync 校验下游。

_ExecuteAsync:

  1. 重新定位开始节点(找不到抛 StartCmpNotFound),置为 context.CurrentNode。
  2. 触发载荷此时已由编排层注入 DicParam,开始组件不做额外处理,直接调用 ExecuteNextAsync 进入下游画布。

画布节点白名单​

VerifyFlowAsync 通过 ComponentManagerBase.IsComponentOfBase<TriggerComponentManagerBase>(node.Type) 校验画布中每个节点,任一节点不属于触发器组件体系即抛 MetaTriggerNodeNotAllowed(带节点类型)。因此触发器画布只允许数据操作、条件分支、消息通知等由 TriggerComponentManagerBase 派生的节点,脚本类组件不在白名单内。

执行追踪与熔断​

  • 节点执行收集器:TriggerComponentManagerBase.ExecuteAsync 在触发器链路中记录每个实际执行到的节点的 Id、Type、是否成功、耗时(毫秒)与失败信息,最终写入触发器运行日志 MetaTriggerRunLog.NodeDetails。
  • 触发深度:执行前把跳数写入 ChameleonContext 的 ChameleonTriggerExecutingDepth,执行结束后重置为 "0",避免污染同批次的后续数据;下游写入会携带该跳数。
  • 熔断:命中熔断缓存(trigger_breaker_{triggerId})时静默跳过执行,不写运行日志、不更新「上次执行信息」;同一「触发器 + 数据 Id」在检测窗口内执行次数达到阈值后触发熔断并暂停一段时间。

异常与校验​

场景异常 / 提示
画布无开始节点StartNodeNotFound
画布存在多个开始节点ProcessCanNotExistMultipleStartCmp
执行时找不到开始节点StartCmpNotFound
画布含非白名单节点MetaTriggerNodeNotAllowed(带节点类型)
触发器版本缺失或配置无效MetaTriggerVersionError / MetaTriggerConfigInvalid

权限与限制​

  • 一个对象触发器只允许存在一个触发器开始节点。
  • 触发器为后台任务,不向调用方返回结果,执行前即跳过操作权限与 MOU 数据权限校验。
  • 触发器画布不支持脚本类组件,「输出到最终结果」开关对其无意义。

相关实现​

项位置
组件管理器TriggerStartComponentManager(Components/Managers/Basic/)
触发器基类TriggerComponentManagerBase(Components/Base/)
编排 / 载荷注入TriggerComponentManagementApp.StartAsync
载荷模型TriggerPayload(Chameleon.Model/ValueObject/Meta/)