跳转到主要内容
文档导航

工作流基础:表单背后的自动化

表单的四个执行点位、节点与流程怎么搭、内置函数与表达式语言要注意什么。

最后更新 2026年9月24日

一句话

工作流就是挂在表单上的「自动做什么」:在提交前、保存前、保存后这些点位里,按顺序跑一串节点。

在哪打开

在表单编辑器顶部切到「工作流」标签。它上面一排是「执行点位」标签:提交前校验 / 保存前 / 保存后 / 保存后(异步)。

主要动作

  • 选执行点位:点某个点位标签→ 结果:切到该点位的图;限制(切换会重置画布上的钻取和选中状态)。
  • 添加节点:工具条点「添加节点」,再选类型→ 结果:节点加入画布。
  • 改节点:画布提示「拖拽横向重排;双击容器进入;单击节点编辑。」→ 结果:右栏出现该节点的属性表单,改完即时生效。
  • 测试运行:工具条点「测试运行」→ 结果:返回输入、输出和日志;限制(走的是沙箱引擎,只在服务端可用的函数在沙箱里跑不了,所以测试通过不等于线上可用;定义里有错误时这个按钮是禁用的)。
  • 调运行设置:工具条点「设置」→ 改「超时(秒)」「最大深度」「最大循环」「启用日志」。
  • 自定义函数:工具条点「函数」,在这份定义里声明只有它自己能用到的函数。
  • 保存:点右下角的「保存」。

字段 / 状态说明

名称含义什么时候用
执行点位提交前校验 / 保存前 / 保存后 / 保存后(异步)「提交前校验」是唯一能在提交前拦住人的点位
节点类型赋值 / 函数调用 / 条件 / 循环 / 并行 / 子流程 / 返回,循环体里另有跳出 / 继续按要表达的逻辑选
循环变量元素变量默认叫 item,序号变量恒为 item_index循环里引用当前元素
问题面板分成「错误」和「警告」,有错误时不能测试运行保存前先看一眼
超时 / 最大深度 / 最大循环这张定义的运行限制防止跑飞

与其它功能的关系

  • 函数目录来自后端的函数注册表,客户端不自己复制一份清单。
  • 表达式输入框带一个可折叠的辅助面板,分「表单字段 / 元数据 / 变量 / 函数 / 运算符 / 字面量」,点一下就插入。
  • 刷 CDN、校验支付这类能力本身就是工作流函数:refreshCdn、checkPayment 都标了只在服务端可用。

限制与注意

  • 内置函数一律是裸的小驼峰写法(refreshCdn,不是 cdn.refresh),分组只是目录里的元数据,不靠函数名前缀。
  • 表达式里环境变量优先于内置函数名:同名变量会把内置函数「抢走」,调用时就报不可调用。
  • 有 15 个数组与谓词内置函数是解析器硬编码的、覆盖不掉:all / any / one / none / filter / map / count / sum / find / findIndex / findLast / findLastIndex / groupBy / sortBy / reduce。
  • 表达式语言没有位运算符,位运算只能用函数:bitand / bitor / bitxor / bitnot / bitshl / bitshr / bitnand / bitushr。
  • 一批函数标了「只在服务端执行」(如 httpGet、findRows、refreshCdn、checkPayment),试运行时它们跑不了、发布后才正常。
  • 工作流的输出只会被折进提交数据当展示用;想真正拒绝一次提交,得靠服务端函数(如 checkPayment)。

常见问题

Q:工作流和侧边栏里的「Loop」是一回事吗? A:不是。工作流挂在表单上、由表单提交触发;Loop 是 Agent,在侧边栏「Agent」组里单独运行。

Q:测试运行通过了,线上就一定对吗? A:不一定。测试走沙箱,只在服务端可用的函数在沙箱里没有绑定。

Q:为什么我调用的函数报未定义? A:先确认名字是裸小驼峰、且没有跟内置函数重名——表达式里同名变量会遮蔽内置函数。

Q:怎么让不满足条件的提交被拦住? A:用「提交前校验」点位;注意工作流的输出拦不住提交,要拦截得用服务端函数。