工作流引擎系统-基于橙单(flowable)的系统开发-流程配置举例

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

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

Workflow 引擎解决的就是这个问题:如果应用程序缺乏强大的逻辑层,势必变得容易出错(信息的路由错误、死循环等等)。

比如 怎么去完成这样一个请假申请的流程呢?

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

以请假申请流程为例,介绍如何创建一个最简单的审批流程。主要介绍任务表单和任务按钮的使用

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

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

接下来两个节点

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

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

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

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

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

实际操作示例(以低代码平台为例)

  1. 在流程设计器中,从"审批节点"拖出3条连线到不同的后续节点。

  2. 选中其中一条连线,设置"流转类型"为"单选一个分支流转",并给这条连线命名(如"同意")。

  3. 处理人在审批页面会看到多个选项按钮,点击其中一个(如"同意"),流程就按对应连线走。

2."按钮",

3."判断条件"类型,通常为布尔类型的变量表达式,流程根据条件判断结果决定是否沿此连线流转。例如,当某个表单字段的值满足特定条件时,流程才会流向对应的节点。

4."单选一个分支流转"。该流转的核心就是人工决策+唯一分支选择,举个例子 :

示例:报销审批流程

当前节点是"部门经理审批",后面有3个分支:

  1. 同意 → 流转到"财务复核"

  2. 驳回 → 流转到"员工修改报销单"

  3. 转交给其他人审批 → 流转到"指定审批人"

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

核心特点

  • 人工介入决策:必须由处理人主动 选择分支,系统不会自动判断(和"条件流转"的区别)。

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

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

和其他类型的对比

  • vs 条件流转:条件流转是系统根据预设规则(如金额>1000自动转上级审批),无需人工选;单选分支必须人手动选。

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

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

  • 为用户任务设置流程变量,只能从前面步骤已经添加到流程里的变量中选择,不能随便用没在流程里定义过的变量。 举个例子理解

    比如设计一个"请假审批"流程:

    1. 第一步:在流程中添加了2个变量:
    • 请假天数 (用户填写的请假时长)

    • 申请人姓名 (提交请假的人)

    1. 后面的任务(比如"经理审批"节点)要设置流程变量时,只能选这2个已经存在的变量,不能用没添加过的(比如"部门编号"如果没在前面步骤定义,就不能选)。如下图"任务变量"里设置了"报销金额"、"审批类型"等流程变量,只能从中选择。
  • 在分支中选择「条件流转」并设置流转条件,如下图所示。

流程任务动态指定审批人

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

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

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

  1. 按业务属性匹配审批人
  • 场景:

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

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

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

  1. 灵活的协作需求
  • 场景:

  • 跨部门项目需要多个负责人会签,但不同阶段的主导部门不同(比如设计阶段由设计部审批,开发阶段由技术部审批)。

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

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

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

  • 动态指定优势:

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

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

在流程编辑器中,在当前用户任务中为下一个审批任务动态设置审批人,例如在报销流程中,根据报销金额大小,下一个审批任务可能是部门经理审批,也可能是财务总监审批,通过动态设置审批人,可让流程根据金额自动匹配相应审批人。具体操作步骤如下。
在用户任务配置「指定审批人」操作。如下图所示,为指定任务配置「指定审批人」,运行到该任务时,可通过点击这里配置「指定审批人」操作按钮,为下一个任务动态指定一或多个审批人,注意,在运行时最终只能选择审批用户或逗号分隔的用户组,在本小节后面的截图中给出与下图匹配的运行时场景
·

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

  • 流程保存之后,发布并设置为主版本。 设置为主版本,主要是为了确保流程能正式生效且被系统正确识别。具体原因可从这3个层面理解:

    1. 区分"草稿"与"正式生效"状态
    • 保存≠生效:

    保存只是将流程设计暂存(类似文档存草稿),此时流程无法被实际业务调用。

    必须发布:发布相当于"定稿",让流程从"设计态"变为"运行态",员工提交任务时才能按这个流程流转。

    • 设置为主版本:

    若流程有多个历史版本(比如迭代修改过),主版本是当前默认生效的版本,避免新旧版本混淆。

    1. 保证流程配置的一致性和权威性
    • 防止误操作:

    未发布的流程可能还在调试中,若直接投入使用,可能因配置错误导致流程混乱(比如审批人漏设、步骤顺序错误)。

    发布前可通过测试验证流程逻辑,发布后正式生效,减少线上故障。

    • 启动流程并运行到配置了「指定审批人」操作的用户任务。这一步会选择用户或用户组,多个用户之间逗号分隔。这里选择的用户或者用户组,将成为下一个审批任务的审批候选者。

      以「人事经理」用户身份登录,在待办任务列表中,就会看到该条审批记录。

      流程表达式设置审批人

    • 在流程编辑器中,我们可以通过「EL表达式」(变量表达式)的方式,为指定任务设置审批人或审批用户组。选择「变量表达式」作为用户或用户组的选择方式。

    • 选择用户分组方式,同时在其右侧输入「EL 表达式」。由于 flowable 的 Spring Starter 做了很好的整合,因此这里直接输入 Spring Bean 的方法名即可。需要注意的是,末尾必须包含「圆括号」。

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

        操作按钮指定流程分支

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

        1. 适配业务的多样性选择
        • 场景:

        • 报销流程中,员工提交申请时可点击"普通报销"或"紧急报销"按钮,分别走不同审批速度的分支(紧急分支跳过部分审核环节)。

        • 合同审批时,法务点击"通过"按钮走下一环节,点击"驳回"按钮则返回给申请人修改。

        • 好处:用按钮让流程分支选择更直观,操作人根据实际情况决定走向,避免固定分支导致流程冗余。

        1. 提升流程操作的自主性
        • 固定分支的缺点:

        若分支条件完全由系统自动判断(如金额>1000走总监审批),可能无法覆盖特殊情况(比如紧急事项需越级审批)。

        • 按钮指定的优势:

        操作人可手动 override 系统规则,例如:

        • 普通员工点击"转上级审批"按钮,强制将任务转给更高层级领导;

        • 客服点击"升级投诉"按钮,将工单转交给投诉处理专员。

        1. 简化流程逻辑配置
        • 减少条件判断复杂度:

        若分支条件需多个变量组合(如"金额+部门+合同类型"),纯系统判断可能需要写复杂规则;而用按钮指定分支,操作人直接选对应按钮,逻辑更简单。

        • 示例:

        采购流程中,采购人点击"标准采购"按钮走常规审批,点击"战略采购"按钮则触发供应商资质复核分支,无需系统自动判断采购类型。

        1. 增强流程的交互体验
        • 操作明确性:

        按钮上的文字(如"同意""驳回""转派")直接告知操作结果,避免操作人因误解规则选错分支。

        • 进度可视化:

        点击按钮后,流程分支走向即时反馈(如弹窗提示"已转入加急通道"),提升使用者对流程的掌控感。

        类比说明

        就像点外卖时选择"自取"或"配送"按钮:

        • 系统原本可能按距离自动判断,但你可以通过按钮手动指定分支,更灵活地满足需求~
      • 审批人点击不同的审批操作,可以选择不同的流程审批路径,具体配置方式如下。

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

      复制代码
      * ****最后看一下实际的审批操作效果。****