别再死磕BPMN了,试试这种“搭积木”式的工作流设计
传统的流程设计,但凡接触过BPMN的都知道,画个图不难,难的是让它真正跑起来,还得能应对业务的变化。
最近在重构公司的审批系统,深入研究了JNPF的流程引擎设计,发现它在流程类型的划分上有个很有意思的思路——不是把所有的流程都塞进BPMN,而是针对不同场景做了差异化设计。
这篇文章不讲虚的,直接拆解一下JNPF中几种核心流程的设计逻辑,以及它们在技术层面是怎么落地的。
一、决策流:把“判断逻辑”从业务代码里抽出来
先说决策流。这个东西本质上是把业务中的“判断逻辑”单独抽离出来,形成一个可独立运行的决策模型。
传统做法里,类似“风控评分”、“额度计算”这类逻辑,要么写在业务代码里,要么塞在数据库存储过程里。改一次规则要重启服务,还要被业务追着问“为什么还没上线”。
JNPF的决策流把这个问题拆成了两个维度:
- 设计支持:决策流作为一种独立的流程类型,直接在JnpfFlow里建模,可以单独运行实例,支持监控
- 嵌入支持:决策流可以嵌入到标准流、任务流中运行
技术上看,决策流的节点设计才是精髓。除了常规的开始/结束节点,它提供了规则集合、赋值运算、多元计算、简单评分卡、交叉决策表这几个核心节点。
举个例子,简单评分卡节点支持A卡、B卡、C卡建模,可以配置变量、表达式、条件值、得分,支持求和或加权求和。这意味着什么?意味着你可以把风控模型直接配置化,业务自己调权重,开发不用改代码。
交叉决策表更直观,横向和纵向两个维度确定一个值,比如“年龄区间×收入区间→额度等级”,比写一堆if-else清晰得多。
技术点:规则集合支持运行时动态修改规则逻辑,无需重启服务。这背后是规则引擎的设计模式,把业务规则从代码中剥离,用DSL描述,运行时动态加载。
二、标准流与简单流:通用场景与轻量场景的分工
JNPF的流程设计遵循BPMN 2.0标准,但做了场景细分。
标准流是完整版的BPMN,支持所有节点类型,适合复杂业务流程。简单流是轻量版,去掉了一些高级节点,适合表单审批这类简单场景。
这种设计的好处是:不让用户面对过多的选择。新手画简单流,不用纠结网关、事件这些概念;复杂场景切标准流,该有的功能一个不少。
三、自由流程:打破固定审批链路的“骚操作”
这是JNPF 6.1新增的功能,个人认为是这次更新最值得关注的一点。
传统的审批流程是固定的:发起→A审批→B审批→C审批→结束。但实际业务中,审批链路经常是动态的——A审批完了,需要谁审批?可能A自己决定。
自由流程的设计是:只有开始节点、自由节点、结束节点三个固定核心节点,自由节点可以添加触发节点和无条件连线。
审批人可以在审批时自主选择下一审批节点及责任人。技术实现上,每指定一个下个审批人,就产生一个审批节点,流程记录按节点维度存储,每个节点只能看到自己的审批记录。
结束规则有两种:
- 审批人自行结束:勾选后,审批人可以选择“直接结束审批”
- 流转次数限制:不勾选时,按设置的流转次数(1-50)自动结束
异常处理也有讲究:全局异常只支持超管和指定人员处理,触发节点会同步显示状态提示。
四、任务流:连线条件与同步/异步发起
任务流的这次升级主要解决两个问题:
1. 连线条件
以前任务流的连线是固定的,现在支持设置连线条件。选择数据源(读取当前连线前面的数据节点),设置条件规则,只有满足条件才能流转。不满足时异常提示“流转条件不满足,触发失败”。
2. 同步/异步发起审批
触发节点的发起审批节点,新增“同步”和“异步”两种发起类型:
- 异步:现有方式,不等待前序任务完成,先执行后续任务
- 同步:等待发起的流程审批结束后再继续往下流转
这个设计解决了流程间的依赖问题。同步发起时,流程不允许删除,防止破坏数据一致性。
3. 目标表单支持@表单ID
触发条件、获取条件、数据校验、更新条件、删除条件这些地方,支持选择@表单ID,实现了表单数据的动态引用。
五、审批意见的细节设计
最后提一个容易被忽略的点:审批意见的配置。
JNPF在办理节点和审批节点都做了“启用审批意见”和“审批意见必填”的选项:
- 不启用时,不显示审批意见栏
- 只启用不勾选必填时,不弹出填写框,点击可编辑
- 勾选必填时,弹出填写框,强制填写
这个细节在合规场景下很关键,能保证关键审批节点的意见可追溯。
总结
回到开头的问题:怎么让工作流设计更高效?
我的理解是:不要试图用一个模型解决所有问题。
JNPF的做法是:
- 决策流:处理复杂的规则判断,抽离业务逻辑
- 标准流/简单流:处理通用审批,按复杂度分层
- 自由流:处理非固定链路审批,给审批人更多自主权
- 任务流:处理流程间的依赖和数据传递
这种“搭积木”式的设计,本质上是把BPMN的能力拆解成不同场景的工具箱。新手入门用简单流和自由流,复杂场景用标准流和决策流,需要流程间协作时用任务流的同步/异步发起。
流程引擎的核心不是画图,而是让流程能真正落地、能适应业务变化。这一点,JNPF的设计思路值得借鉴。
你公司的流程设计是怎么做的?欢迎在评论区讨论。