注意:转载请务必联系本人付费转载

什么是工作流引擎(Workflow Engine )?

例如开发一个系统,最关键的部分不是系统的界面(增删改查之类),也不是和数据库之间的交互(读写数据库之类),而是如何根据业务逻辑开发出符合实际需要的程序逻辑。

 Workflow 引擎解决的就是这个问题:“业务逻辑的执行规则”从程序中抽离,让系统更贴近实际业务需求的变化。

比如电商订单的状态流转(下单→支付→发货→确认收货)、审批流程的分支判断(不同金额走不同审批人),这些逻辑若硬编码在代码里,会导致系统难以维护和扩展。

Workflow 引擎的价值在于:

- 抽象业务流程:用可视化或配置化的方式定义“流程节点”“流转规则”“条件分支”,让业务逻辑与代码解耦。

- 动态执行控制:按预设规则自动推进流程,比如报销单提交后自动分配给直属领导审批,无需手动编写大量条件判断。

- 灵活扩展:业务流程变更时,只需修改引擎配置(如新增审批节点),无需重构代码,降低迭代成本。

那 怎么去完成这样一个比如下面这样的“请假申请”的流程呢?

 此处着重描述如何用橙单(flowable的一个商业化付费平台)常用流程的配置示例。

 以请假申请流程为例,介绍如何创建一个最简单的审批流程。 

上面的流程图中,设置了录入(请假申请)、部门领导审批以及 HR 审批三个用户任务节点。

在该流程中,只有录入即「请假申请」节点可以修改表单数据,因此将「录入」任务的「允许编辑」标记设置为选中。

接下来两个节点

「部门领导审批」和「HR 审批」节点都需要「同意」和「拒绝」两个按钮,所以要在这两个节点下添加相应的按钮。

拒绝,默认拒绝操作。 驳回,当前审批人,驳回待办任务到上一个任务节点。区别在于:

一个 “终结”,一个 “回退”

1. 拒绝(默认拒绝操作):直接终结当前流程实例

“拒绝” 是终止性操作—— 当前审批人直接否定整个流程的合理性,操作后流程实例会直接进入 “已拒绝”“已终止” 等最终状态,不允许再向下或向上流转,也无法通过调整内容重新提交(若要发起类似需求,需重新创建一个全新的流程实例)。
  • 流程走向示例:
    以 “差旅费报销流程” 为例,流程节点为:员工发起 → 部门负责人审批 → 财务审批
    若部门负责人点击 “拒绝”:
    • 该报销流程直接终止,不会流转到 “财务审批” 节点;
    • 发起员工会收到 “流程已被拒绝” 的通知,但无法在原流程上修改报销金额、补充凭证后重新提交;
    • 若员工仍需报销,必须重新点击 “发起流程”,填写新的报销表单,从头开始走审批流程。

2. 驳回(驳回至前序任务节点):回退流程并允许调整后重新提交

 

“驳回” 是修正性操作—— 当前审批人认为流程内容(如表单填写错误、材料不完整)需要调整,但流程本身有合理性,因此将待办任务 “退回给上一个任务节点的处理人”(通常是流程发起人,或上一级审批人),待对方修正后可重新提交,流程会再次流转到当前审批人或后续节点。

45df7b91-85c7-4e62-b376-3787e93f149f

 

 

节点设置完了,配置流转路径,即节点之间的连线。可以选择为不同的连线设置不同的按钮,当按钮被点击时,可以根据下图的配置,走不同的流转路径。

选中“连线”里的基础设置里有“流转类型”可以是

  • “自动判断”(无需人为干预或条件判断,流程会按照预设路径自动流转到下一个节点,常用于简单且固定的流程场景。),

自动流转是固定路径(比如提交后必到审核),没有选择空间。

  •  “按钮”,见上图操作
  • “判断条件”类型,通常为布尔类型的变量表达式,流程根据条件判断结果决定是否沿此连线流转。例如,当某个表单字段的值满足特定条件时,流程才会流向对应的节点。
  • “单选一个分支流转”。该流转的核心就是人工决策+唯一分支选择,举个例子 :示例:报销审批流程当前节点是“部门经理审批”,后面有3个分支:

a. 同意 → 流转到“财务复核”

b. 驳回 → 流转到“员工修改报销单”

c. 转交给其他人审批 → 流转到“指定审批人”

此时设置为“单选一个分支流转”,部门经理处理时只能选其中一个分支,不能同时走多个方向,确保流程按单一路径继续。

核心特点

- 人工介入决策:必须由处理人主动选择分支,系统不会自动判断(和“条件流转”的区别,条件流转是系统根据预设规则(如金额>1000自动转上级审批),无需人工选;)。

- 排他性选择:不能同时勾选多个分支,比如“同意”和“驳回”不能同时选,保证流程逻辑不冲突。

- 灵活适配人工场景:适合需要人根据实际情况拍板的场景,比如合同审批中的“通过”“拒绝”“补充材料”等选项。

下图描述了 如何在流程中创建流程变量,并且使用流程变量作为条件流转的条件。

  在流程管理(尤其是工作流、业务流程管理 BPM 等领域)中,流程变量是指在流程执行过程中用于存储、传递和共享数据的动态参数。它们是流程实例运行时的 “数据载体”,支撑着流程的逻辑判断、任务分配、状态跟踪等核心功能。

  在流程管理(尤其是工作流、BPM 等领域)中,流程实例是指根据预设的流程模型(流程定义)启动并正在执行或已完成的具体 “运行实例”。它是流程从 “抽象定义” 到 “实际执行” 的载体,承载了特定业务场景的完整执行过程。

在流程变量设置步骤,添加流程变量,并将变量绑定到数据表字段。

为用户任务设置流程变量,只能从前面步骤已经添加到流程里的变量中选择,不能随便用没在流程里定义过的变量。为操作按钮配置变量,变量名和变量值可以随意设定,这里需要注意的是,变量名尽量不要使用字段名,使用任何字符串均可。

 

举个例子理解
比如设计一个“请假审批”流程:
a. 第一步:在流程中添加了2个变量:
-  请假天数 (用户填写的请假时长)
-  申请人姓名 (提交请假的人)

b. 后面的任务(比如“经理审批”节点)要设置流程变量时,只能选这2个已经存在的变量,不能用没添加过的(比如“部门编号”如果没在前面步骤定义,就不能选)。

如下图“任务变量”里设置了“报销金额”、“审批类型”等流程变量,只能从中选择。

在分支中选择「条件流转」并设置流转条件,如下图所示。

 

互斥网关中任务变量的设置:

有个问题发现,数据库设置了bool类型的任务变量初值是true,流程分支走的还不是 走得 “是”那一支

f1ca0048a1432d4fff9a20fd5cb9435f

 

 

 

待解决?

 

 

流程任务动态指定审批人

给流程任务动态指定审批人,核心是为了让流程更灵活适配现实场景,避免“一刀切”的固定审批模式。具体原因可以从这几个场景理解:

1. 职责分工动态变化

- 场景:部门经理出差时,审批任务需要自动转给副经理;某个项目的负责人临时变更,审批权限也要跟着转移。

- 好处:不用手动修改流程配置,系统根据规则(如“当前审批人不在岗时转交给指定替补”)自动调整,避免流程卡住。

2. 按业务属性匹配审批人

- 场景:

- 报销金额≤1000元,由直属主管审批;金额>1000元,自动转给部门总监。

- 技术类合同由技术部经理审批,财务类合同由财务部经理审批。

- 好处:根据业务数据(如金额、合同类型)动态分配审批人,符合企业“权责对等”的管理逻辑。

3. 灵活的协作需求

- 场景:

- 跨部门项目需要多个负责人会签,但不同阶段的主导部门不同(比如设计阶段由设计部审批,开发阶段由技术部审批)。【在流程管理(如工作流、BPM)中,会签是指多个参与者对同一任务进行独立处理(如审批、意见反馈),并根据预设规则(如 “多数通过”“全票通过”)汇总结果,最终决定流程走向的协作模式。它是解决 “多人协同决策” 场景的核心机制,常见于需要集体意见的业务流程(如项目立项审批、合同评审等)。】

- 员工提交请假时,可以自己选择“直接上级”或“临时代理人”作为审批人。

- 好处:适配复杂协作场景,减少流程冗余。

4. 提升审批效率

- 固定审批人缺点:如果固定由某个人审批,一旦对方离职、休假或任务积压,流程就会停滞。

- 动态指定优势:

- 按“岗位”指定(如“技术部经理”岗位),即使岗位换人,流程也能自动对应新任职者。

- 按“角色”指定(如“流程创建者的上级”),无需手动维护审批人名单。

在流程编辑器中,将用户任务的审批人配置为流程变量,变量值来自于绑定的业务表字段。这里需要注意的是,如果指定的是用户,而非用户组 (部门、角色和岗位等),切记要使用「用户登录名」字段,目前并不支持使用「userId」字段值作为绑定的变量值。

在流程编辑器中,在当前用户任务中为下一个审批任务动态设置审批人,

例如在报销流程中,根据报销金额大小,下一个审批任务可能是部门经理审批,也可能是财务总监审批,通过动态设置审批人,可让流程根据金额自动匹配相应审批人。

具体操作步骤如下:

在用户任务配置「指定审批人」操作。如下图所示,为指定任务配置「指定审批人」,运行到该任务时,可通过点击这里配置「指定审批人」操作按钮,为下一个任务动态指定一或多个审批人,
注意: 在运行时最终只能选择审批用户或逗号分隔的用户组 

在配置下一个任务的审批人时,只能从一个叫「指定审批人」的流程变量中获取审批人信息,不能直接填写具体人名或选择其他变量。

流程保存之后,发布并设置为主版本。

为什么需要设置为主版本?主要是为了确保流程能正式生效且被系统正确识别,区分版本的“草稿”与“正式生效”状态。

之前已经启动且运行到快结束的流程实例,会继续按照它启动时所使用的旧版本流程来执行,直到该流程实例正常完成(比如审批结束等既定的结束条件达成)或者被强制终止。也就是说,这些已经在运行中的流程实例不会因为新的主版本发布而切换到新版本,会 “不受影响” 地走完当前的流程周期。

启动,根据主版本,启动新的「流程实例」

步骤一般是 编辑-发布-设置主版本

启动流程并运行到配置了「指定审批人」操作的用户任务。这一步会选择用户或用户组,多个用户之间逗号分隔。这里选择的用户或者用户组,将成为下一个审批任务的审批候选者。流程表达式设置审批人在流程编辑器中,我们可以通过「变量表达式」的方式,为指定任务设置审批人或审批用户组。选择「变量表达式」作为用户或用户组的选择方式。选择用户分组方式,同时在其右侧输入「变量 表达式」。由于 flowable 的 Spring Starter 做了很好的整合,因此这里直接输入 Spring Bean 的方法名即可。需要注意的是,末尾必须包含「圆括号」。

变量 表达式方法的返回值是字符串类型,如果是用户组,需要返回用户的登录名,多个用户之间「逗号」分隔,如 admin,leaderHR,manger。如是其他分组形式,则需要返回相对应的 ID 集合,多个 ID 之间同样也是「逗号」分隔,如 1779777400603676672,1779777400603676675 等。

操作按钮指定流程分支

流程设计中用操作按钮指定流程分支,核心是为了让流程能根据实际业务需求灵活“分叉”,就像开车时通过按钮选择不同道路。
具体原因和场景如下:
a. 适配业务的多样性选择

场景:-报销流程中,员工提交申请时可点击“普通报销”或“紧急报销”按钮,分别走不同审批速度的分支(紧急分支跳过部分审核环节)。
合同审批时,法务点击“通过”按钮走下一环节,点击“驳回”按钮则返回给申请人修改。

- 好处:用按钮让流程分支选择更直观,操作人根据实际情况决定走向,避免固定分支导致流程冗余。
b. 提升流程操作的自主性- 固定分支的缺点:若分支条件完全由系统自动判断(如金额>1000走总监审批),可能无法覆盖特殊情况(比如紧急事项需越级审批)。- 按钮指定的优势:操作人可手动 override 系统规则,例如:- 普通员工点击“转上级审批”按钮,强制将任务转给更高层级领导;- 客服点击“升级投诉”按钮,将工单转交给投诉处理专员。
c. 简化流程逻辑配置- 减少条件判断复杂度:若分支条件需多个变量组合(如“金额+部门+合同类型”),纯系统判断可能需要写复杂规则;而用按钮指定分支,操作人直接选对应按钮,逻辑更简单。- 示例:采购流程中,采购人点击“标准采购”按钮走常规审批,点击“战略采购”按钮则触发供应商资质复核分支,无需系统自动判断采购类型。

d. 增强流程的交互体验- 操作明确性:按钮上的文字(如“同意”“驳回”“转派”)直接告知操作结果,避免操作人因误解规则选错分支。

e.进度可视化:点击按钮后,流程分支走向即时反馈(如弹窗提示“已转入加急通道”),提升使用者对流程的掌控感。

类比说明就像点外卖时选择“自取”或“配送”按钮: 系统原本可能按距离自动判断,但可以通过按钮手动指定分支,更灵活地满足需求~审批人点击不同的审批操作,可以选择不同的流程审批路径,
具体配置方式如下

为当前流程任务的「输出连线」配置条件,这样当审批人选择不同操作按钮时,便可以选择不同的执行路径最后,实际的审批操作效果如下

 注意:转载请务必联系本人付费转载