工作流引擎系统-基于橙单(flowable)的系统开发-流程配置举例
什么是工作流引擎(Workflow Engine )
例如开发一个系统,最关键的部分不是系统的界面(增删改查之类),也不是和数据库之间的交互(读写数据库之类),而是如何根据业务逻辑开发出符合实际需要的程序逻辑。
Workflow 引擎解决的就是这个问题:如果应用程序缺乏强大的逻辑层,势必变得容易出错(信息的路由错误、死循环等等)。
比如 怎么去完成这样一个请假申请的流程呢?

此处着重描述如何用橙单(flowable的一个商业化付费平台)常用流程的配置示例。
以请假申请流程为例,介绍如何创建一个最简单的审批流程。主要介绍任务表单和任务按钮的使用

- 上面的流程图中,设置了录入(请假申请)、部门领导审批以及 HR 审批三个用户任务节点。
在该流程中,只有录入即「请假申请」节点可以修改表单数据,因此将「录入」任务的「允许编辑」标记设置为选中。

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

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

选中“连线”里的基础设置里有“流转类型”可以是
1.“自动判断”(无需人为干预或条件判断,流程会按照预设路径自动流转到下一个节点,常用于简单且固定的流程场景。),
自动流转是固定路径(比如提交后必到审核),没有选择空间。
实际操作示例(以低代码平台为例)
1. 在流程设计器中,从“审批节点”拖出3条连线到不同的后续节点。
2. 选中其中一条连线,设置“流转类型”为“单选一个分支流转”,并给这条连线命名(如“同意”)。
3. 处理人在审批页面会看到多个选项按钮,点击其中一个(如“同意”),流程就按对应连线走。
2.“按钮”,
3.“判断条件”类型,通常为布尔类型的变量表达式,流程根据条件判断结果决定是否沿此连线流转。例如,当某个表单字段的值满足特定条件时,流程才会流向对应的节点。
4.“单选一个分支流转”。该流转的核心就是人工决策+唯一分支选择,举个例子 :
示例:报销审批流程
当前节点是“部门经理审批”,后面有3个分支:
1. 同意 → 流转到“财务复核”
2. 驳回 → 流转到“员工修改报销单”
3. 转交给其他人审批 → 流转到“指定审批人”
此时设置为“单选一个分支流转”,部门经理处理时只能选其中一个分支,不能同时走多个方向,确保流程按单一路径继续。
核心特点
- 人工介入决策:必须由处理人主动选择分支,系统不会自动判断(和“条件流转”的区别)。
- 排他性选择:不能同时勾选多个分支,比如“同意”和“驳回”不能同时选,保证流程逻辑不冲突。
- 灵活适配人工场景:适合需要人根据实际情况拍板的场景,比如合同审批中的“通过”“拒绝”“补充材料”等选项。
和其他类型的对比
- vs 条件流转:条件流转是系统根据预设规则(如金额>1000自动转上级审批),无需人工选;单选分支必须人手动选。
下图描述了 如何在流程中创建流程变量,并且使用流程变量作为条件流转的条件。
在流程变量设置步骤,添加流程变量,并将变量绑定到数据表字段。

- 为用户任务设置流程变量,只能从前面步骤已经添加到流程里的变量中选择,不能随便用没在流程里定义过的变量。
举个例子理解
比如设计一个“请假审批”流程:
1. 第一步:在流程中添加了2个变量:
- 请假天数 (用户填写的请假时长)
- 申请人姓名 (提交请假的人)2. 后面的任务(比如“经理审批”节点)要设置流程变量时,只能选这2个已经存在的变量,不能用没添加过的(比如“部门编号”如果没在前面步骤定义,就不能选)。如下图“任务变量”里设置了“报销金额”、“审批类型”等流程变量,只能从中选择。
![]()
- 在分支中选择「条件流转」并设置流转条件,如下图所示。
![]()
流程任务动态指定审批人
给流程任务动态指定审批人,核心是为了让流程更灵活适配现实场景,避免“一刀切”的固定审批模式。具体原因可以从这几个场景理解:
1. 职责分工动态变化
- 场景:部门经理出差时,审批任务需要自动转给副经理;某个项目的负责人临时变更,审批权限也要跟着转移。
- 好处:不用手动修改流程配置,系统根据规则(如“当前审批人不在岗时转交给指定替补”)自动调整,避免流程卡住。
2. 按业务属性匹配审批人
- 场景:
- 报销金额≤1000元,由直属主管审批;金额>1000元,自动转给部门总监。
- 技术类合同由技术部经理审批,财务类合同由财务部经理审批。
- 好处:根据业务数据(如金额、合同类型)动态分配审批人,符合企业“权责对等”的管理逻辑。
3. 灵活的协作需求
- 场景:
- 跨部门项目需要多个负责人会签,但不同阶段的主导部门不同(比如设计阶段由设计部审批,开发阶段由技术部审批)。
- 员工提交请假时,可以自己选择“直接上级”或“临时代理人”作为审批人。
- 好处:适配复杂协作场景,减少流程冗余。
4. 提升审批效率
- 固定审批人缺点:如果固定由某个人审批,一旦对方离职、休假或任务积压,流程就会停滞。
- 动态指定优势:
- 按“岗位”指定(如“技术部经理”岗位),即使岗位换人,流程也能自动对应新任职者。
- 按“角色”指定(如“流程创建者的上级”),无需手动维护审批人名单。
在流程编辑器中,在当前用户任务中为下一个审批任务动态设置审批人,例如在报销流程中,根据报销金额大小,下一个审批任务可能是部门经理审批,也可能是财务总监审批,通过动态设置审批人,可让流程根据金额自动匹配相应审批人。具体操作步骤如下。
·
在配置下一个任务的审批人时,只能从一个叫「指定审批人」的变量中获取审批人信息,不能直接填写具体人名或选择其他变量。

- 流程保存之后,发布并设置为主版本。
设置为主版本,主要是为了确保流程能正式生效且被系统正确识别。具体原因可从这3个层面理解:
1. 区分“草稿”与“正式生效”状态
- 保存≠生效:
保存只是将流程设计暂存(类似文档存草稿),此时流程无法被实际业务调用。
必须发布:发布相当于“定稿”,让流程从“设计态”变为“运行态”,员工提交任务时才能按这个流程流转。
- 设置为主版本:
若流程有多个历史版本(比如迭代修改过),主版本是当前默认生效的版本,避免新旧版本混淆。
2. 保证流程配置的一致性和权威性
- 防止误操作:
未发布的流程可能还在调试中,若直接投入使用,可能因配置错误导致流程混乱(比如审批人漏设、步骤顺序错误)。
发布前可通过测试验证流程逻辑,发布后正式生效,减少线上故障。![]()
- 启动流程并运行到配置了「指定审批人」操作的用户任务。这一步会选择用户或用户组,多个用户之间逗号分隔。这里选择的用户或者用户组,将成为下一个审批任务的审批候选者。
![]()
![]()
以「人事经理」用户身份登录,在待办任务列表中,就会看到该条审批记录。
流程表达式设置审批人
- 在流程编辑器中,我们可以通过「EL表达式」(变量表达式)的方式,为指定任务设置审批人或审批用户组。选择「变量表达式」作为用户或用户组的选择方式。
![]()
- 选择用户分组方式,同时在其右侧输入「EL 表达式」。由于 flowable 的 Spring Starter 做了很好的整合,因此这里直接输入 Spring Bean 的方法名即可。需要注意的是,末尾必须包含「圆括号」。
![]()
- EL 表达式方法的返回值是字符串类型,如果是用户组,需要返回用户的登录名,多个用户之间「逗号」分隔,如 admin,leaderHR,manger。如是其他分组形式,则需要返回相对应的 ID 集合,多个 ID 之间同样也是「逗号」分隔,如 1779777400603676672,1779777400603676675 等。
![]()
操作按钮指定流程分支
流程设计中用操作按钮指定流程分支,核心是为了让流程能根据实际业务需求灵活“分叉”,就像开车时通过按钮选择不同道路。具体原因和场景如下:
1. 适配业务的多样性选择
- 场景:
- 报销流程中,员工提交申请时可点击“普通报销”或“紧急报销”按钮,分别走不同审批速度的分支(紧急分支跳过部分审核环节)。
- 合同审批时,法务点击“通过”按钮走下一环节,点击“驳回”按钮则返回给申请人修改。
- 好处:用按钮让流程分支选择更直观,操作人根据实际情况决定走向,避免固定分支导致流程冗余。
2. 提升流程操作的自主性
- 固定分支的缺点:
若分支条件完全由系统自动判断(如金额>1000走总监审批),可能无法覆盖特殊情况(比如紧急事项需越级审批)。
- 按钮指定的优势:
操作人可手动 override 系统规则,例如:
- 普通员工点击“转上级审批”按钮,强制将任务转给更高层级领导;
- 客服点击“升级投诉”按钮,将工单转交给投诉处理专员。
3. 简化流程逻辑配置
- 减少条件判断复杂度:
若分支条件需多个变量组合(如“金额+部门+合同类型”),纯系统判断可能需要写复杂规则;而用按钮指定分支,操作人直接选对应按钮,逻辑更简单。
- 示例:
采购流程中,采购人点击“标准采购”按钮走常规审批,点击“战略采购”按钮则触发供应商资质复核分支,无需系统自动判断采购类型。
4. 增强流程的交互体验
- 操作明确性:
按钮上的文字(如“同意”“驳回”“转派”)直接告知操作结果,避免操作人因误解规则选错分支。
- 进度可视化:
点击按钮后,流程分支走向即时反馈(如弹窗提示“已转入加急通道”),提升使用者对流程的掌控感。
类比说明
就像点外卖时选择“自取”或“配送”按钮:
- 系统原本可能按距离自动判断,但你可以通过按钮手动指定分支,更灵活地满足需求~审批人点击不同的审批操作,可以选择不同的流程审批路径,具体配置方式如下。
![]()
![]()
- 为当前流程任务的「输出连线」配置条件,这样当审批人选择不同操作按钮时,便可以选择不同的执行路径。
![]()
![]()
- 最后看一下实际的审批操作效果。
![]()
- 最后看一下实际的审批操作效果。
- EL 表达式方法的返回值是字符串类型,如果是用户组,需要返回用户的登录名,多个用户之间「逗号」分隔,如 admin,leaderHR,manger。如是其他分组形式,则需要返回相对应的 ID 集合,多个 ID 之间同样也是「逗号」分隔,如 1779777400603676672,1779777400603676675 等。
- 选择用户分组方式,同时在其右侧输入「EL 表达式」。由于 flowable 的 Spring Starter 做了很好的整合,因此这里直接输入 Spring Bean 的方法名即可。需要注意的是,末尾必须包含「圆括号」。
- 启动流程并运行到配置了「指定审批人」操作的用户任务。这一步会选择用户或用户组,多个用户之间逗号分隔。这里选择的用户或者用户组,将成为下一个审批任务的审批候选者。
工作流引擎系统-基于橙单(flowable)的系统开发-流程配置举例的更多相关文章
- PHP新闻系统开发流程
PHP新闻系统开发流程一.系统总体设计 (一)系统功能描述和功能模块划分 (二)系统流程分析 (三)系统所用文件二.数据库设计 (一)创建数据库 (二)设计表结构三.新闻发布模块开发 (一)新闻首页 ...
- 基于web的网上书城系统开发-----需求分析
网上书店管理系统主要针对中小型书店,图书管理员将图书信息整理归类发布到网上.,用户登录该网站后进行浏览图书信息.购买等活动. 前台客户输入的数据交给后台数据库处理并及时反馈给双方.客户和管理者拥有相应 ...
- 基于微信小程序的系统开发准备工作
腾讯推出微信小程序也有一段时间了,在各种行业里面也都掀起一阵阵的热潮,很多APP应用被简化为小程序的功能迅速推出,同时也根据小程序的特性推出各种独具匠心的应用,相对传统的APP来说,微信小程序确实能够 ...
- 基于web的网上书城系统开发-----登录注册
注册功能实现 signup.jsp //时间实现 function showLocale(objD) { var str,colorhead,colorfoot; var yy = objD.getY ...
- .net 基于Jenkins的自动构建系统开发
先让我给描述一下怎么叫一个自动构建或者说是持续集成 : 就拿一个B/S系统的合作开发来说,在用SVN版本控制的情况下,每个人完成自己代码的编写,阶段性提交代码,然后测试-修改,最后到所有代码完工,进行 ...
- 基于web的网上书城系统开发-----登录注册扩展-------验证码功能
public class CheckCode extends HttpServlet { private static final long serialVersionUID = 1L; privat ...
- VTK基于MFC单文档的开发
目录 项目的搭建 相关头文件的引用 添加成员变量vtkRenderer, vtkMFCWindow CXxxView()中实例化变量vtkRenderer CXxxView::OnInitialUpd ...
- 基于SpringBoot框架企业级应用系统开发全面实战
Eclipse 安装spring-tool-suite教程,并创建一个新的springboot项目 使用SpringBoot构建项目,加载SSM整合的applicationContext.xml的注解 ...
- 单页web应用开发流程
用循环的视角审视Web应用开发 框定一个一致的SPA图形用户界面(GUI)和模型 将SPA的原则带回服务器端 聚集于对合适的应用进行早期SPA开发[3] SPA协调的起点是认识到SPA与脚本和网页编 ...
- SSM商城系统开发笔记-配置01-web.xml
先占坑 慢慢填, 商城系统使用主体框架:Spring + Spring MVC + Mybatis 其他框架: 日志: slf4j + logback <!DOCTYPE web-app PUB ...
随机推荐
- 比cat更好用的命令!
大家好,我是良许. 作为程序员,大家一定对 cat 这个命令不陌生.它主要的功能就是用来显示文本文件的具体内容. 但 cat 命令两个很重大的缺陷:1. 不能语法高亮输出:2. 文本太长的话无法翻页输 ...
- 自动驾驶 | 为CarLA添加一辆小米SU7 Part I
自动驾驶 | 为CarLA添加一辆小米SU7 Part I 导言 什么是CarLA? CarLA是一款基于虚幻引擎4(Unreal Engine 4)构建的开源自动驾驶仿真平台,为自动驾驶算法的研发. ...
- Koin 依赖注入: 在 Android 模块化项目中定义 Room 数据库的最佳实践
前置 本文发布于个人小站:https://wavky.top/db-in-multi-modules/ 欢迎移步至小站,关注更多技术分享,获得更佳阅读体验 (不保证所有技术文章都会同步发表到博客园) ...
- CI/CD 概念简介
〇.前言 CI/CD 是现代软件开发的核心实践,通过自动化和协作,显著提升交付效率和质量. 本文将对 CI 和 CD 这两个概念进行简要介绍,供参考. 一.CI/CD 的核心概念 CI/CD 是 De ...
- 机器人操作系统ROS2之安装(Ubuntu 24)
根据官网说明,ROS2是支持MAC的,本来打算在手头的MAC 15.3.2装一个,虽然要自己编译ROS2系统,但是想着比虚拟机性能好,就兴冲冲的开始了,也没在意官网提示尽量还是装安装版.最后折腾了几天 ...
- 使用搜索引擎时如何排除一些垃圾站点,比如csdn.net
使用搜索引擎时需要排除一些垃圾站点,比如csdn.net时,可以在关键词后面加上-site:csdn.net: stable diffusion docker部署TensorFlow 教程 -site ...
- CF1424G题解
思路 这个题意思很显然,是求 nnn 个区间重叠最多的地方和值. 那么我们能想到用差分数组,在扫一遍的过程中维护最大值和 pospospos. 但是需要注意的是,区间最大会到 10910^9109,直 ...
- 【经验】微信小程序|云后台比价(自带云开发、leancloud、bmob)(2022/10/31更新)
这个博客UI不太好看,我另外也发在了博客园里,可点击链接查看. 文章目录 前言 1. 免费配额 2. 超过额度时收费情况 3. 另外的价钱 总结 前言 作为前端开发者,没有购买云服务器的习惯,在只需要 ...
- AD 侦查-SMB_2
本文通过 Google 翻译 AD Recon – NetBIOS (137/138/139) and SMB (445) Part-2 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校 ...
- vue3 基础-插件 plugin 案例演示
前篇有介绍关于插件 plugin 的无敌强大和基本使用流程后, 当时从俺的经验上看是没咋去使用它的, 即英雄无用武之地. 本篇也是从网上找个案例来为 plugin 的强大来小试牛刀啦. 假设我们要做一 ...












