工作流引擎
什么是工作流
- 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。
- 它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”
工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统。
工作流是建立在业务流程的基础上进行自动化管理的,工作流只是协助进行业务流程管理。即使没有工作流系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
应用场景
- 商业贸易:订单、报价处理、合同审核、客户电话处理、供应链管理等
- 行政管理:出差申请、加班申请、公章申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
- 人事管理:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
- 财务管理: 付款请求、应收款处理、日常报销处理、出差报销、补贴申请、预算和计划申请等。
- 客户服务: 客户信息管理、客户投诉、请求处理、售后服务管理等。
- ISO 流程、质管流程、数据信息管理、实验室标准流程、物流货物跟踪等各种通过表单逐步手工流转完成的任务
解决痛点
传统的流程控制实现,是采用状态字段的值来跟踪流程的变化情况。但是当流程发生变更的时候,这种方式所编写的代码也要进行调整。使用了工作流,可以做到业务流程变化之后,我们的程序可以不用改变,大大提升了业务系统的适应能力。
常见工作流引擎
jBPM
由 JBoss 公司开发,目前最高版本 JPBM7,不过从 JBPM5 开始已经跟之前不是同一个产品了,JBPM5 的代码基础不是 JBPM4,而是从 Drools Flow 重新开始。下面要涉及的很多产品都是以 JBPM4 的代码为起点进行开发的。
Activity
Activity 是主流的工作流开源框架,Activity 第一版在 2010 年 5 月发布,当时仅支持最简单的流程处理,之后的版本陆续完善了对 BPMN 2.0 规范的支持。其核心是使用 Java 开发的。其前身就是 JBPM。
Flowable
Flowable 是因为其与 Activiti 对未来规划的路线不认同而基于 activiti6 开辟了一条自己的道路。
Flowable 项目提供了一组核心的开源业务流程引擎,这些引擎紧凑且高效。它们为开发人员、系统管理员和业务用户提供了一个工作流和业务流程管理(BPM)平台。它的核心是一个非常快速且经过测试的动态 BPMN 流程引擎。它基于 Apache2.0 开源协议,有稳定且经过认证的社区。
Flowable 可以嵌入 Java 应用程序中运行,也可以作为服务器、集群运行,更可以提供云服务。
相比于 Activiti,Flowable 的核心思想更像是在做一个多彩的工具,它在工作流的基础功能上,提供了很多其他的扩展,使用者可以随心所欲地把 Flowable 打造成自己想要的样子。
Camunda
基于 activiti5,所以其保留了 PVM,最新版本 Camunda7,开发团队也是从 activiti 中分裂出来的,发展轨迹与 flowable 相似,同时也提供了商业版。
BPMN
BPMN 是什么
BPMN(Business Process Modeling Notation,即业务流程建模符号),是一种流程建模的通用和标准语言,用来绘制业务流程图,以便更好地让各部门之间理解业务流程和相互关系。
通过 BPMN 进行业务流程建模得到业务流程的定义,它规定了工作流引擎如何协调与执行业务的流转过程。
它有两个版本:
- BPMN 1.0 规范由标准组织 BPMI(后并入到 OMG)于 2004 年 5 月发布;
- BPMN 2.0 标准由 OMG 于 2011 年推出。
BPMN 2.0
BPMN2.0 相对于 BPMN1.0 最大的区别就是定义、规范了流程引擎的执行语义和格式,利用标准的图元描述真实的业务发生过程,保证相同的流程在不同的流程引擎中得到一致的执行结果。在 2.0 的这套标准中,主要对流程执行定义了三类基本要素,分别为 Activities(活动)、Gateways(网关)、Events(事件)。
基础元素——流对象
流对象(Flow Objects)是定义业务流程的主要图形元素,包括三种:事件、活动、网关
事件(Events):指的是在业务流程的运行过程中发生的事情
- 开始:表示一个流程的开始
- 中间:发生的开始和结束事件之间,影响处理的流程
- 结束:表示该过程结束
活动(Activities):包括任务和子流程两类。子流程在图形的下方中间外加一个小加号(+)来区分。
网关(Gateways):用于表示流程的分支与合并。
- 排他网关:只有一条路径会被选择
- 并行网关:所有路径会被同时选择
- 包容网关:可以同时执行多条线路,也可以在网关上设置条件
- 事件网关:专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后,流程处于等待状态,需要等待抛出事件才能将等待状态转换为活动状态。

基础元素——数据
数据(Data)主要通过四种元素表示:
- 数据对象(Data Objects)
- 数据输入(Data Inputs)
- 数据输出(Data Outputs)
- 数据存储(Data Stores)
基础元素——连接对象
连接对象(Connecting Objects)表示流对象彼此互相连接或者连接到其他信息的方法,主要有三种:
- 顺序流:用一个带实心箭头的实心线表示,用于指定活动执行的顺序
- 信息流:用一条带箭头的虚线表示,用于描述两个独立的业务参与者(业务实体/业务角色)之间发送和接受的消息流动
- 关联:用一根带有线箭头的点线表示,用于将相关的数据、文本和其他人工信息与流对象联系起来。用于展示活动的输入和输出
基础元素——泳道
泳道(Swimlanes)对主要的建模元素进行分组,将活动划分到不同的可视化类别中来描述由不同的参与者的责任与职责。
BPMN 实例
拍卖服务 BPMN 模板

书籍销售流程 BPMN

