匹配分支 组件
匹配分支组件(SwitchCase)定义多路分支中的单个匹配项,用于与多路分支产生的结果值比较。
概述
匹配分支是多路分支(Switch)的落点:它配置一个「匹配值」(CaseValue),当多路分支脚本返回的结果与匹配值相等时,执行连在匹配分支下游的组件。
一个多路分支可以连接多个匹配分支,各自匹配不同的值,形成 case 列表。
配置项
| 配置项 | 说明 |
|---|---|
| 匹配值 | 与脚本结果比较的目标值(CaseValue) |
匹配规则
| 规则 | 说明 |
|---|---|
| 相等匹配 | 脚本结果经字符串化后与 CaseValue 完全相等时命中该分支 |
| 多分支 | 一个多路分支可连出多个匹配分支,各自独立判断 |
| 无命中 | 所有匹配分支都未命中时,不继续任何分支 |
使用场景
- 状态值分类路由
- 类型分类处理
- 条件分发
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明匹配分支组件的节点元数据。
节点元数据
匹配分支组件由 FlowCmpType.SwitchCase 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "SwitchCase" |
CaseValue | string | 匹配值 | 目标字符串,例 "Approved" |
order | string | 同级排序 | 例:"3" |
元数据存储示例
{
"ID": "case1",
"type": "SwitchCase",
"CaseValue": "Approved",
"order": "3"
}
服务端执行逻辑
匹配分支由 SwitchCaseComponentManager(继承 InterfaceComponentManagerBase)实现。本节说明它如何读取脚本结果并决定是否继续推进。
元数据均为字符串
节点元数据以 Dictionary<string, string> 存储,CaseValue 为字符串;比较时脚本结果也会先转成字符串,因此是字符串等值比较。
执行时机与场景
| 时机 | 说明 |
|---|---|
| 保存/发布校验 | _VerifyAsync 校验上游类型与 CaseValue 后 VerifyNextAsync |
被 Switch 调度 | Switch 的 ExecuteNextAsync 会执行全部下游,因此每个 SwitchCase 都会进入 _ExecuteAsync |
输入参数(meta 键)
| meta 键 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
CaseValue | string | 匹配值 | 与脚本结果比较的字符串,长度不超过 100 |
此外,_ExecuteAsync 隐式依赖上下文中的 CmpResult(上游 Switch 写入的脚本结果)。
执行步骤
- 读取
meta.SafeGet("CaseValue")。 - 把上游结果转为字符串:
Convert.ToString(context.CmpResult)。 - 若与
CaseValue完全相等,调用ExecuteNextAsync(context)继续执行本分支下游。 - 否则直接
return context,不推进(该分支在此终止)。
分支路由规则
- 判断依据是
CmpResult的字符串形式与CaseValue的完全相等(区分大小写、不做数值归一 )。 SwitchCase之间互不影响:每个分支独立比较,命中的分支各自推进,未命中的分支各自终止。- 上游必须是
Switch:执行前PreviousCmpType会被Switch置为"Switch",校验阶段以此断言用法正确。
输出与上下文
| 上下文属性 | 匹配分支的处理 |
|---|---|
CmpResult / Result | 不写入 |
| 下游推进 | 仅命中时调用 ExecuteNextAsync |
异常与校验
_VerifyAsync 的校验规则:
| 场景 | 判定 | 异常 / 提示 |
|---|---|---|
上游不是 Switch | context.PreviousCmpType != "Switch" | SwitchCaseMustBeUsedWithBranch(上游必须配合分支组件使用) |
| 匹配值为空 | CaseValue 为空白 | SetMatchValueInComponent |
| 匹配值超长 | CaseValue.Length > 100 | MatchValueLengthLimit |