简介:本文从数据模型、中国式审批语义、表单权限、条件分支与低代码扩展等维度,系统梳理自主搭建工作流时的引擎选型要点,帮助开发者识别“能画流程图”与“能跑企业级流程”之间的差距,并给出可落地的评估清单与建模思路。
当团队决定“自己搭一套工作流”时,真正棘手的问题往往不是前端画布好不好看,而是底层流程引擎能否承载企业里那些“说不清、但必须支持”的办理方式。很多项目在演示阶段非常顺利:拖几个节点、连几条线、点一下发起,流程就跑起来了。但一进入真实业务,退回、跳转、驳回、前加签、后加签、条件分支、表单权限等问题集中爆发,最后不得不反复重构。
本文围绕自主搭建工作流时最容易被低估的几个技术点展开,给出一套可落地的选型与设计思路。
这两个概念经常被混为一谈,但它们的工程含义完全不同。
自主搭建平台时,如果只关注画布,很容易做出一个“看起来能用、跑起来就崩”的系统。判断一个引擎是否合格,可以先问三个问题:
第三点尤为关键。很多通用引擎只提供“同意/拒绝”两种动作,遇到“退回上一节点”“跳转到任意已办节点”“办理前加签”“办理后加签”时,只能在上层写大量补丁逻辑,最终流程状态变得不可控。
一个值得关注的工程信号是:流程引擎的数据库结构是否简洁。业界一些设计良好的实现,核心表可以控制在 8 张左右,分别承载流程定义、节点定义、连线定义、流程实例、任务实例、变量、历史记录、附件或表单绑定等职责。
表少并不意味着功能弱,反而通常说明设计者做了两件正确的事:
一个简化的流程定义 JSON 结构可能长这样:
{"processKey": "leave_apply","version": 3,"nodes": [{"id": "start","type": "start","name": "发起"},{"id": "dept_approve","type": "userTask","name": "部门审批","assigneeRule": "role:dept_manager","formPermissions": {"leaveDays": "readonly","reason": "editable"}},{"id": "hr_approve","type": "userTask","name": "人事审批"}],"edges": [{ "from": "start", "to": "dept_approve" },{"from": "dept_approve","to": "hr_approve","condition": "${leaveDays} >= 3"},{"from": "dept_approve","to": "end","condition": "${leaveDays} < 3"}]}
这种“关系表管状态、JSON 管定义”的组合,是自主搭建工作流时非常实用的折中方案。
这是选型中最容易被忽视、却最影响落地效果的部分。企业审批不是理想化的状态机,它需要处理大量“人”的因素。
两者在引擎层面需要区分清楚:退回改变的是当前任务指针,驳回往往改变的是整个实例的状态。如果引擎没有原生语义,就需要业务层维护“回退栈”,复杂度会迅速上升。
跳转允许办理人把流程直接送到任意指定节点,常见于“越级审批”或“补充材料后重走某环节”。引擎需要支持:
加签的本质是动态修改任务分派规则,而不是修改流程定义。因此引擎需要支持运行时的任务派生与汇聚,否则只能通过“复制一份流程”来绕过,导致数据割裂。
自主搭建工作流的目标之一,是让业务人员不写代码也能配置出可用的流程。这就要求节点属性和表单权限都能在界面上完成配置。
点击任一节点后,通常需要编辑以下属性:
表单权限是低代码体验的核心。同一个表单,在不同节点上应该呈现不同的可编辑状态:
| 字段 | 发起节点 | 部门审批 | 人事审批 |
|---|---|---|---|
| 请假天数 | 可编辑 | 只读 | 只读 |
| 请假事由 | 可编辑 | 可编辑 | 只读 |
| 审批意见 | 隐藏 | 可编辑 | 可编辑 |
这种权限矩阵如果靠前端硬编码,每加一个节点就要改一次代码;如果由引擎的描述数据驱动,配置即可生效。
串行节点上的条件分支,是流程从“线性审批”走向“业务编排”的分水岭。
设想一个请假流程:请假天数大于等于 3 天时,部门审批完成后进入人事审批;否则直接结束。配置方式通常是在连线上设置条件表达式:
条件:${leaveDays} >= 3
引擎在部门审批完成后,会对所有出边条件求值,选择第一条满足条件的分支继续执行。这里有几个工程细节需要注意:
完成流程设计后,通常提供“保存”和“发布”两个动作。它们的区别不只是按钮文案:
这种“草稿—发布—版本”的模型,是自主搭建工作流时必须提前设计的。否则一旦线上流程被直接修改,正在运行的实例就会出现不可预期的行为。
自主搭建工作流平台,通常希望基于主流技术框架,并保持组件独立、可扩展。评估时可以关注:
在最终决策前,可以用下面这份清单逐项验证:
自主搭建工作流,选型的本质不是比较功能列表的长短,而是判断引擎是否理解企业审批的真实语义。一个数据库结构简洁、以 JSON 描述流程与表单、原生支持中国式办理方式、并以主流框架组件化实现的流程引擎,能够让团队把精力放在业务本身,而不是持续修补流程状态。先想清楚“流程怎么跑”,再去挑“流程怎么画”,往往能少走很多弯路。