结束组件
结束组件(End)是平台接口流程图的出口节点,标记一条执行路径的结束,并把最终结果返回给调用方。
概述
流程执行到结束组件时终止当前分支,不再向下执行。接口场景下,返回给调用方的数据由「输出到最终结果」(IsFinalResult)的组件决定,结束组件本身不承载业务逻辑,只作为路径终点。
一个流程可以包含多个结束组件,用于不同分支分别收尾。结束节点属于引擎固定节点,不可禁用、不可删除,也不能插入到连线中间。
配置项
| 配置项 | 说明 |
|---|---|
| 排序 | 同一层级节点的执行顺序 |
| 禁用当前节点 | 固定节点不支持禁用,不显示该开关 |
多结束点
不同分支可以连向不同的结束组件,从而在视觉上区分收尾路径。无论连向哪个结束组件,接口返回值都由标记了 IsFinalResult 的组件决定。
返回结果说明
| 返回来源 | 说明 |
|---|---|
| 输出到最终结果 | 组件属性面板开启后,其执行结果作为接口返回值 |
| 自定义响应 | CustomResponse 组件可显式设定返回码与提示 |
| JSON 脚本 | JsonScript 组件可配置完整的响应结构 |
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明结束组件的节点元数据。
节点元数据
结束组件由 FlowCmpType.End 标识,GetNodeMeta 返回的 meta 只包含类型:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "End" |
order | string | 同级排序 | 例:"99" |
ID | string | 节点标识 | 画布生成 |
元数据存储示例
{
"ID": "end1",
"type": "End",
"order": "99"
}
引擎约束
| 约束 | 说明 |
|---|---|
| 固定节点 | FlowCmpFixedTypes 包含 End,不可禁用、不可插入边中间 |
| 初始化节点 | 接口画布以 [Start, End] 初始化 |
服务端执行逻辑
结束组件由 EndComponentManager 实现,为兼容对象触发器链路,它继承的是 TriggerComponentManagerBase(InterfaceComponentManagerBase 的子类)。本节说明结束节点如何终止分支并决定返回值。
节点元数据以 Dictionary<string, string> 存储,meta 中所有值都是字符串,服务端通过 meta.SafeGet("键名") 读取后再做类型转换。
执行时机与场景
| 时机 | 说明 |
|---|---|
| 分支到达出口 | 执行流进入结束节点,标记当前分支终止,不再递归下游 |
| 保存/发布校验 | _VerifyAsync 校验流程至少存在一个输出节点(触发器链路例外) |
结束组件是 FlowCmpFixedTypes 成员,IsDisabled 对其无效,引擎不会跳过结束节点。
输入参数(meta 键)
结束组件没有业务输入参数,meta 仅含通用键:
| meta 键 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | "End" |
order | string(数字) | 同级排序 | 如 "99" |
ID | string | 节点标识 | 画布生成 |
执行步骤
EndComponentManager._ExecuteAsync 非常轻量:
context.Result ??= ResponseResult.Success();:当上游没有任何输出节点写入结果时,兜底填入「成功」响应。- 直接返回上下文,不调用
ExecuteNextAsync,从而终止当前分支的继续推进。
分支终止规则
结束组件不参与 GetNextList 的下游遍历,因此它的下游连线不会被引擎执行;一个流程中出口在数据上表现为「得到 Result 的收尾节点」。
输出与上下文
| 上下文属性 | 结束组件的处理 |
|---|---|
Result | 仅当为 null 时写入 ResponseResult.Success();已有值则保留上游输出 |
| 其他属性 | 不做修改 |
接口的实际返回值由标记 IsFinalResult == "true" 的组件在执行时写入的 context.Result 决定;结束组件只在无输出时兜底成功响应。
异常与校验
_VerifyAsync 的校验规则:
| 场景 | 判定 | 异常 / 提示 |
|---|---|---|
| 接口链路无输出节点 | FinalResultCount == 0 且非触发器链路 | ProcessOutputNotFound |
| 对象触发器链路 | IsTriggerRun(context) == true(上下文含触发器节点采集器) | 不校验输出节点,直接通过 |
FinalResultCount 由 InterfaceComponentManagerBase.VerifyFinalResultCount 累加:校验过程中每遇到一个 IsFinalResult == "true" 的节点即加一。因此若唯一的输出节点被禁用(校验时不会成为 CurrentNode),也会触发 ProcessOutputNotFound。