提取为行为流
行为流越写越长时,可以把其中一段节点提取成一个新的行为流。Zion 会根据这段节点读取和产出的数据,自动生成新行为流的入参和出参,并在原位置放一个 运行行为流 节点调用它。提取前后,原行为流的执行结果不变。
如果你还不熟悉行为流的入参、出参和节点,请先阅读搭建行为流。
适用场景
- 一个行为流里有一段逻辑可以独立成一步,例如“计算订单金额”“校验库存”,拆出来后主流程更容易读。
- 多个行为流里有相同的一段逻辑,提取一次后,其他行为流用 运行行为流 节点调用即可。
- 想基于现有的一段节点新建一个行为流,但不想改动原行为流。
操作步骤
选择节点
在行为流画布上选中要提取的节点,可以通过以下两种方式发起提取:
- 框选多个节点后,点击选区工具条上的 提取为行为流。
- 在节点上打开右键菜单,选择 提取为行为流。
选中 条件分支、列表循环 或 条件循环 节点时,会连同它内部的全部节点一起提取。所选节点需要满足的条件见选择规则。

确认提取设置
在 提取为行为流 弹窗中确认以下设置:
- 名称:新行为流的名称,默认为“原行为流名称 - 片段”。
- 分组:新行为流所在的分组,默认与原行为流相同。
- 用“运行行为流”节点替换原节点:默认勾选,原位置的节点会被移走,换成一个调用新行为流的 运行行为流 节点。取消勾选时,只新建行为流,原行为流保持不变。
展开 影响范围,可以在提取前预览这次提取会产生的变化:
| 分区 | 说明 |
|---|---|
| 入参 | 所选节点引用的外部数据,每一项会成为新行为流的一个入参。 |
| 出参 | 后续节点引用的、所选节点产出的结果,会成为新行为流的出参。 |
| 自动添加的节点 | 为保持执行结果不变而自动添加的 接收变量、写回变量 节点,只在涉及行为流变量时出现。 |
| 公开的类型 | 需要转为自定义对象才能跨行为流传递的私有类型。 |

如果所选节点不支持提取,弹窗中会显示 所选节点暂不支持提取 和具体原因。
完成提取
点击 提取。提取完成后:
- 项目中新增一个行为流,包含所选节点,以及根据数据生成的入参和出参。
- 勾选了替换时,原位置变为一个 运行行为流 节点,入参已经绑定好原来读取的数据;后续节点改为从该节点读取结果。

提取后可以通过撤销恢复到提取之前。
新行为流的配置
新行为流沿用原行为流的执行模式(同步或异步)和超时设置。它不带任何触发器,只通过 运行行为流 节点调用;行为流权限与新建行为流时相同,可以在 设置 → 权限 中调整。
入参
所选节点引用了以下数据时,每一项会成为新行为流的一个入参,运行行为流 节点的对应入参自动绑定到原来的数据:
- 前序节点的结果。
- 原行为流的入参。
- 原行为流的行为流变量(只读取、未修改时)。
- 所在 列表循环 的当前项和索引。
入参名称取自数据来源的名称,例如节点名称或循环名称。如果节点结果整体不能作为入参(例如没有类型名称的对象),会只把用到的字段逐个作为入参传入。
引用的是查询结果的聚合值(数量、求和、平均值等)时,传入的是聚合后的值,而不是整个列表。
出参
所选节点产出的结果被后续节点引用时,会成为新行为流的出参:
- 只有一个结果被引用时,它直接作为出参返回。
- 有多个结果被引用时,会合并为一个对象返回,每个结果是对象中的一个字段。
后续节点会改为读取:
行为流数据 → 运行行为流节点名称 → 字段名
和入参一样,结果整体不能作为出参时会按用到的字段返回;被引用的是聚合值时,返回聚合后的值。
没有任何结果被后续节点引用时,新行为流没有出参。
行为流变量
行为流变量只在声明它的行为流内有效,新行为流不能直接修改原行为流的变量。提取时按变量的使用方式分别处理:
| 变量的使用方式 | 处理方式 |
|---|---|
| 所选节点只读取、不修改 | 作为普通入参传入。 |
| 所选节点修改了它,所选节点之外没有用到 | 变量随节点移入新行为流,并从原行为流中删除。 |
| 所选节点修改了它,所选节点之外仍在使用 | 新行为流声明同名变量,并自动添加 接收变量 和 写回变量 节点,见下文。 |
接收变量 和 写回变量 都是 设置变量 节点:
- 接收变量:位于新行为流开头,用入参初始化变量。调用时传入变量的当前值,保证新行为流内的节点读到的值与提取前一致。
- 写回变量:位于原行为流中 运行行为流 节点之后,把新行为流返回的变量值写回原变量,保证后续节点读到的是修改后的值。
即使所选节点不读取这个变量,也会添加 接收变量。例如变量只在某个分支里被修改:如果新行为流里的变量不先接收当前值,没有走到这个分支时,写回变量 会把它覆盖成默认值。
如果所选节点位于 列表循环 或 条件循环 内部(循环本身没有被选中),所选节点修改的每个行为流变量都会按第三种方式处理,即使循环外没有用到它。因为循环每执行一次就会调用一次新行为流,不这样处理的话,变量每一轮都会从默认值开始,无法在多轮之间累计。
私有类型
API 响应等数据使用的是私有类型,只能在原来的位置使用,不能直接作为另一个行为流的入参或出参。提取时遇到这类类型,会把它转为自定义对象,并在 影响范围 → 公开的类型 中列出:
- 类型 ID 不变,现有的数据绑定都不受影响。
- 自动命名为“API 名称 响应”;响应中嵌套的类型命名为“API 名称 响应 / 字段路径”;其他来源命名为“节点名称 结果”。名称重复时,在后面加上“ (2)”这样的序号。
选择规则
满足以下条件的节点才能提取:
- 在同一层级且连续:所选节点必须是同一层级中首尾相连的一段,可以位于主流程、某个分支或某个循环内部,但不能跨层级或中间有间隔。
- 不包含输入和输出节点:输入 和 输出 节点不能提取。所选的条件分支中如果有分支以 输出 节点结束,也不能提取,因为移入新行为流后,它只会结束新行为流,而不是原行为流。
- 整块选择条件分支和循环:不能单独提取条件分支中的一个分支,请选择分支内的节点,或者选择整个 条件分支。
- 跳出循环与其所属循环一起选择:所选节点包含 跳出循环 时,它所属的循环也必须在所选范围内。
- 被调用的行为流仍然存在:所选节点中有 运行行为流 节点,且它调用的行为流已被删除时,不显示 提取为行为流。
在调试视图中不能提取节点。
另外,以下情况也会在弹窗中提示无法提取:
- 所选节点引用的某项数据,类型不能作为行为流入参。
- 后续节点引用的某个结果,或需要写回的某个行为流变量,类型不能作为行为流出参。
只新建行为流
取消勾选 用“运行行为流”节点替换原节点 时:
- 只新建行为流,原行为流的节点、数据绑定和行为流变量都保持不变,也不会添加 写回变量 节点。
- 新行为流的入参、出参、接收变量 节点和公开的类型,与勾选时相同。
适合在原有逻辑的基础上新建一个可复用的行为流,之后再逐步替换原来的调用位置。