工作流从入门到精通:JNPF这五种流程设计,真香

0 阅读6分钟

别再死磕BPMN了,试试这种“搭积木”式的工作流设计

传统的流程设计,但凡接触过BPMN的都知道,画个图不难,难的是让它真正跑起来,还得能应对业务的变化。

最近在重构公司的审批系统,深入研究了JNPF的流程引擎设计,发现它在流程类型的划分上有个很有意思的思路——不是把所有的流程都塞进BPMN,而是针对不同场景做了差异化设计

这篇文章不讲虚的,直接拆解一下JNPF中几种核心流程的设计逻辑,以及它们在技术层面是怎么落地的。

一、决策流:把“判断逻辑”从业务代码里抽出来

先说决策流。这个东西本质上是把业务中的“判断逻辑”单独抽离出来,形成一个可独立运行的决策模型。

传统做法里,类似“风控评分”、“额度计算”这类逻辑,要么写在业务代码里,要么塞在数据库存储过程里。改一次规则要重启服务,还要被业务追着问“为什么还没上线”。

JNPF的决策流把这个问题拆成了两个维度:

  • 设计支持:决策流作为一种独立的流程类型,直接在JnpfFlow里建模,可以单独运行实例,支持监控
  • 嵌入支持:决策流可以嵌入到标准流、任务流中运行

7-决策流程.png

技术上看,决策流的节点设计才是精髓。除了常规的开始/结束节点,它提供了规则集合、赋值运算、多元计算、简单评分卡、交叉决策表这几个核心节点。

举个例子,简单评分卡节点支持A卡、B卡、C卡建模,可以配置变量、表达式、条件值、得分,支持求和或加权求和。这意味着什么?意味着你可以把风控模型直接配置化,业务自己调权重,开发不用改代码。

交叉决策表更直观,横向和纵向两个维度确定一个值,比如“年龄区间×收入区间→额度等级”,比写一堆if-else清晰得多。

技术点:规则集合支持运行时动态修改规则逻辑,无需重启服务。这背后是规则引擎的设计模式,把业务规则从代码中剥离,用DSL描述,运行时动态加载。

二、标准流与简单流:通用场景与轻量场景的分工

JNPF的流程设计遵循BPMN 2.0标准,但做了场景细分。

标准流是完整版的BPMN,支持所有节点类型,适合复杂业务流程。简单流是轻量版,去掉了一些高级节点,适合表单审批这类简单场景。

这种设计的好处是:不让用户面对过多的选择。新手画简单流,不用纠结网关、事件这些概念;复杂场景切标准流,该有的功能一个不少。

三、自由流程:打破固定审批链路的“骚操作”

这是JNPF 6.1新增的功能,个人认为是这次更新最值得关注的一点。

传统的审批流程是固定的:发起→A审批→B审批→C审批→结束。但实际业务中,审批链路经常是动态的——A审批完了,需要谁审批?可能A自己决定。

自由流程的设计是:只有开始节点、自由节点、结束节点三个固定核心节点,自由节点可以添加触发节点和无条件连线

自由流程-1.png

审批人可以在审批时自主选择下一审批节点及责任人。技术实现上,每指定一个下个审批人,就产生一个审批节点,流程记录按节点维度存储,每个节点只能看到自己的审批记录。

结束规则有两种:

  • 审批人自行结束:勾选后,审批人可以选择“直接结束审批”
  • 流转次数限制:不勾选时,按设置的流转次数(1-50)自动结束

异常处理也有讲究:全局异常只支持超管和指定人员处理,触发节点会同步显示状态提示。

四、任务流:连线条件与同步/异步发起

任务流的这次升级主要解决两个问题:

1. 连线条件

以前任务流的连线是固定的,现在支持设置连线条件。选择数据源(读取当前连线前面的数据节点),设置条件规则,只有满足条件才能流转。不满足时异常提示“流转条件不满足,触发失败”。

2. 同步/异步发起审批

触发节点的发起审批节点,新增“同步”和“异步”两种发起类型:

  • 异步:现有方式,不等待前序任务完成,先执行后续任务
  • 同步:等待发起的流程审批结束后再继续往下流转

这个设计解决了流程间的依赖问题。同步发起时,流程不允许删除,防止破坏数据一致性。

3. 目标表单支持@表单ID

触发条件、获取条件、数据校验、更新条件、删除条件这些地方,支持选择@表单ID,实现了表单数据的动态引用。

五、审批意见的细节设计

最后提一个容易被忽略的点:审批意见的配置。

JNPF在办理节点和审批节点都做了“启用审批意见”和“审批意见必填”的选项:

  • 不启用时,不显示审批意见栏
  • 只启用不勾选必填时,不弹出填写框,点击可编辑
  • 勾选必填时,弹出填写框,强制填写

这个细节在合规场景下很关键,能保证关键审批节点的意见可追溯。

总结

回到开头的问题:怎么让工作流设计更高效?

图片 13.png

我的理解是:不要试图用一个模型解决所有问题

JNPF的做法是:

  • 决策流:处理复杂的规则判断,抽离业务逻辑
  • 标准流/简单流:处理通用审批,按复杂度分层
  • 自由流:处理非固定链路审批,给审批人更多自主权
  • 任务流:处理流程间的依赖和数据传递

这种“搭积木”式的设计,本质上是把BPMN的能力拆解成不同场景的工具箱。新手入门用简单流和自由流,复杂场景用标准流和决策流,需要流程间协作时用任务流的同步/异步发起。

流程引擎的核心不是画图,而是让流程能真正落地、能适应业务变化。这一点,JNPF的设计思路值得借鉴。


你公司的流程设计是怎么做的?欢迎在评论区讨论。