工作流节点运行成功,只能说明当前节点完成了执行。下一个节点能否使用结果,还取决于输出字段有没有产生、变量引用是否指向正确路径、数据类型是否符合输入要求。ZGI Workflow 会把节点输出写入运行时变量池,后续节点通过"节点标识+输出字段"读取对应值。
这条路径把数据流转拆成了两个动作:节点负责产生结构化输出,变量池负责保存和提供引用。任何一端发生变化,流程都可能继续运行,却把空值、旧字段或错误类型传到下一步。排查时要沿着输出、选择器和输入逐段核对。

概念示意图:节点输出按路径进入变量池,后续节点使用相同路径读取并校验输入。
节点成功后,数据会放到哪里
ZGI 的工作流执行链会遍历节点返回的输出字段。每个字段以节点标识和字段名组成选择器,再写入当前运行的变量池。例如,一个解析节点标识为 parse_invoice,输出字段为 tax_id,后续引用需要同时找到这两层。只写字段名,或继续引用改名前的节点标识,都可能拿不到值。
变量池保存当前执行产生的数据,不会自动理解字段的业务含义。上游把税号输出为字符串,下游却要求一个对象;上游返回文件列表,下游按单个文件读取;这些情况都需要在节点输入处显式转换或校验。
| 现象 | 优先检查 | 常见处理 |
|---|---|---|
| 变量显示为空 | 节点标识、字段名、输出是否存在 | 重新选择当前节点的实际输出 |
| 有值但节点报类型错误 | 字符串、对象、数组或文件类型 | 增加转换或结构校验 |
| 部分任务偶尔缺值 | 条件分支、空值和异常路径 | 给缺失值设置明确处理路径 |
| 循环后读到错误结果 | 本轮输出、聚合结果和引用范围 | 区分单轮值与汇总值 |
字段改名最容易留下旧引用
工作流迭代时,开发者常会重命名节点或调整输出结构。画布上的连接线仍在,旧变量引用却可能继续指向已经不存在的路径。流程启动后,上游节点照常完成,下游拿到空值,错误直到数据库写入、接口请求或模型整理阶段才暴露。
修改节点后可以做一次引用影响检查:记录旧节点标识和字段名,找出所有使用位置,再逐个重新选择变量。若下游节点支持固定输入结构,可以在入口增加必填字段与类型检查,让错误停在数据刚进入节点的位置。
条件分支也会改变变量是否存在。某条路径没有被激活时,该路径上的节点不会产生输出。后续公共节点若直接读取这项变量,需要准备默认值、合并节点或缺失分支,不能把"画布上存在这个节点"当成"本次运行一定产生了值"。
上线前用四类输入验收
测试不应只跑一条字段齐全的正常数据。至少加入完整输入、缺少可选字段、缺少必填字段和进入另一条分支的输入,逐次核对上游输出、变量路径、下游输入与最终业务结果。涉及数组、文件和对象时,再加入空集合与多元素输入。
ZGI 的运行记录可以帮助定位哪个节点产生了什么输出,变量池则负责把输出交给后续节点。两者结合后,排查顺序会更清楚:先确认输出,再确认路径,随后检查类型和分支。流程通过这组验收后,再连接真实数据库或外部接口。