BPMN2.0规范及流程引擎选型方案
BPMN2.0规范及流程引擎选型方案
- 一、基本概念
- 二、BPMN意义
- 三、主要元素
- 3.1 活动
- 任务
- 子流程
- 调用活动
- 事件子流程
- 事务
- 3.2 网关
- 排他网关
- 包容网关
- 并行网关
- 事件网关
- 3.3 事件
- 开始事件
- 结束事件
- 中间事件
- 3.4 辅助
- 泳道图
- 注释与组
- 数据存储
- 四、图类型
- 4.1 编排图
- 4.2 会话图
- 五、技术选型
- 5.1 前端
- BPMN.JS
- LogicFlow
- [AntV X6](https://github.com/antvis/X6)
- 5.2 后台
- Activiti
- Flowable
- Compileflow
- 六、总结
大家好,我是比特桃。本文主要简明扼要的介绍了BPMN2.0规范的内容,可让读者快速度的了解BPMN2.0所涵盖的主要内容和图形样式。也较为详细的阐述了如何绘制标准的流程图,以及在软件层面中如何实现业务流程功能,和技术选型。
一、基本概念
我们生活中存在了大量的业务流程,大到结婚买房,小到请假买票。都需要按照规定的流程办事,如果流程比较简单我们可以通过画点草图来让大家理解。但当业务过于复杂的时候,如果没有一个业务流程图的规范,恐怕很难让人和机器看懂。为了让全球各种业务流程图能统一,就出现了BPMN(Business Process Model and Notation)标准,该标准已经成为了ISO标准之一(标准下载)。
BPMN2.0主要规范了图形,像UML图一样,也就是我们看到图就明白这个业务流的逻辑。那实际系统如何去根据图形去实现控制运转,这是属于工作流引擎要做的事情,像工作流运行中的控制模式,就得参考Control-Flow Patterns。需要重点说明的是,现在知名工作流引擎:Activiti、Flowable、Camunda还有国内的炎黄盈动等,都是自称支持BPMN2.0规范。实际他们的运行逻辑、属性标识、存储结构都是大致相同,但略有区别,是不能跨流程引擎通用的。比如符合BPMN2.0规范的开始事件的XML格式一般叫<startEvent>
,但网关的引擎内部定义就不太一样了,有的工作流引擎甚至不会采用XML格式而是JSON格式存储。所以流程引擎所谓的支持BPMN2.0,只是功能及外观遵循了标准。实际软件层面的实现,是可以根据自身需求来的。对于第一次接触BPMN2.0规范的来说,区分这个概念至关重要。
二、BPMN意义
使用图形规范的意义就是为了让所有能看懂,就和我们现实中的语言一样。除此之外,在这样一个信息化的时代,我们有太多软件业务去处理现实中复杂的流程了。比如OA办公系统、WMS仓库管理系统、TMS物流管理系统、OMS、SRM、CRM订单管理系统等等。这些业务流程通常非常复杂,如果不通过规范去约束,用我们自己的符号去绘制。恐怕很容易踩坑,并且也不容易形成业务层面的标准和经验积累。那通过BPMN2.0规范,我们可以极大程度的对流程图进行治理、风险把控与合规性检查。
上图是一个简单的BPMN模型实例,该流程是一个招聘职位的模型。根据我们的观察不难理解其中含义,虽然你可能不知道这个图中每个模块的专业名词,但能看懂理解这个图的流程是什么。所以BPMN在可视化理解方面,还是做的挺不错的,也就是我所推崇的:最好的产品就是没有说明书的产品。
三、主要元素
在BMPN2.0中,组件主要分为四类:活动、网关、事件、辅助。这里分享一个业务过程模型和符号规范总结图,便于你快速了解。
3.1 活动
活动相当于实体,可以说流程图的实体模型定义主要就是由活动组成的。组件如下图所示:
任务
最常用的活动就是任务了,。为了区分各种类型的任务,通常会在任务组件中,加入图标用以说明:
组件的颜色、样式及图标并没有统一的规范,在开发的时候可以根据系统的主色调进行适配。只要保持大致的形状即可。
子流程
但我们的流程过于复杂,就需要对流程图进行抽象。这样可以将细枝末节并相对独立的部分抽取到一个单独的流程里,在总体流程中再进行引入。
调用活动
一般子流程和任务它们属于流程图的一部分,不能单独使用。然而在多数情况下,一个活动应该在多个流程图中都可以复用。BPMN为此提供了调用活动
的构造。当一个全局的活动或子流程被调用时候,用粗边框进行表示。
事件子流程
与普通流程不同,时间子流程不是序列流触发的。而是由程序执行期间,消息流所触发的事件而设计的流程。
事务
和数据库里的事务概念一样,一项事务可以全部执行,也可以全部不执行。如果出现问题,则必须回滚事务。
3.2 网关
网关相当于业务处理组件,活动(实体)只是来说明有什么,网关则可以通过与活动的连线来定义其规则。组件如下图所示:
排他网关
依序判断执行第一个为Ture的分支,其它分支不判断不执行。
包容网关
选择或合并一条或多条路径,比如我们选择多个标签来筛选列表。
并行网关
顾名思义,并行网关是指可以分叉同时并行执行的网关。
事件网关
上面三种网关是基于数据的独占 (XOR) 网关,但对于正在处理的数据走不同路径我们就需要事件网关。即基于事件的网关,该网关不基于数据进行路由,而是根据接下来发生的事件进行路由。请考虑这样一个业务流:我们订购比萨饼并等待它送达。我们只能在收到披萨后才能吃饭,但是如果 60 分钟后披萨还没有送来怎么办?我们会打一个焦虑的电话,就是这样!我们可以使用事件网关对此进行建模:
3.3 事件
流程图只能用来描述静态的业务流程,但现实世界是由各种不确定性因素所所叠加的。当执行一个流程时,它将使用并创建数据、信息、文件、文档等。从一个活动到另一个活动的序列流通常伴随着数据传递。而数据的不同会造成不同的事件,我们要像编写程序一样,捕获各种各样的事件,这样才能保证系统的完整性和可靠性。
在绘图的时候,需要考虑两个方面:事件的原因(触发器),以及事件在流程图中的影响。
最常用的事件是以下三种,其中开始事件和结束事件最关键,也是每个流程图都需要具备的元素,中间事件根据所需添加。需要注意的是,三种事件图标中间会填充的不同符号,用来表达不同的意思。
事件的类型很多,所以这里用一个实际的例子来观察:
开始事件
条件事件即条件为真的时候所触发的流程;信号事件指的是全局广播事件的监听;多重事件是指组合了多个事件,只要其中一个事件发生就会被启动;并行多重事件需要所有事件都必须发生才会启动。
结束事件
默认结束事件就是一个加重的黑圈,里面是空白的;消息事件信封符号会被填充为黑色;终止结束事件则是纯黑色,该事件不仅删除了单个令牌,而是终止了整个流程。
中间事件
中间事件可以发送和接收信号,通常在以下两种情况下使用中间事件:
- 在流程中触发与其他事件相关的事件(例如,发送消息或信号);
- 对流程中的事件有所相应(例如,当接收到消息或达到某一时间点)。
3.4 辅助
BPMN2.0规范中,最常用的图形就是上述的活动、网关、事件。但为了让复杂的业务更加清晰的表达,BPMN也提出了一些辅助组件的使用。注意:这些辅助组件只是为了更好的表达业务模型,并不是必须的。
泳道图
泳道图如下图所示,可以将不同的业务流拆分成不同的道。他们类似于将游泳池划分为不同得道,游泳比赛的每位参赛者只能在自己道里游泳。
注释与组
注释主要是为了流程图做一些补充说明,我们可以按照自己喜欢的方式应用注释和组,甚至可以跨越池边界。注释和组不会影响执行语义,因此不要将它们与子流程等混淆。注:可用颜色区分。
数据存储
流程图在运行时,如想突出其数据流的走向,可以通过数据对象和数据库来表达。
下图为数据流的例子:
四、图类型
本节主要介绍面对复杂场景的时候,如何构建清晰的流程模型。
4.1 编排图
当需要多个公司进行交互互作的时候,如多家公司以一种能够完全自动化下达和履行订单以及其他业务事务的方式连接其信息系统,每家公司需要对自己的流程负责。
上图为一个协作图,但没有办法表达更为详细的表达:消息流中的事件和逻辑顺序。编排图就是为了重点突出消息交换本身,如下图所示:
编排图分为了三栏,上下两栏分别表示了参与者。例图中:深色为接收方,白色为发起方。
4.2 会话图
会话图概述了某个区域的哪些参与者在哪些任务上进行合作。在下图中,可以看到三个会话。在处理广告订单时,一个客户与一个广告代理商和几个饭计师一起工作。另一方面,客户和广告代理商可以共同开展广告活动。为此,他们与几家媒介合作。设计师还可以是另一家公司的活动的一部分:与出版商一起,设计师处理插图的订单。
五、技术选型
目前,BPMN2.0应用最广泛的地方就是流程引擎了。人们通过标准所规定的符号,画出全球公认的流程图。然后在自身系统中,进行运行实现复杂的业务逻辑的可视化。下面罗列出实现业务流程需要的前后端技术,可根据自身项目情况进行选型:
5.1 前端
BPMN.JS
BPMN 2.0 渲染工具包和 web 建模器。它是用 JavaScript 编写的,将 BPMN 2.0 图表嵌入在浏览器中, 并独立于后端, 这也使得将其嵌入到任务 Web 应用程序中变得很容易: 可以独立使用也可以集成到你的应用中。
LogicFlow
滴滴开源的,LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制,方便我们快速在业务系统内满足类流程图的需求。专注于业务自定义的流程图编辑框架,支持实现脑图、ER图、UML、工作流等各种图编辑场景。
AntV X6
阿里开源的,X6 是 AntV 旗下的图编辑引擎。提供简单易用的节点定制能力和开箱即用的交互组件,方便我们快速搭建流程图、DAG 图、ER 图等图应用。
5.2 后台
Activiti
针对商务人员、开发人员和系统管理员的轻量级工作流和业务流程管理 (BPM) 平台。它的核心是用于 Java 的超快速且坚如磐石的 BPMN 2 流程引擎。它是开源的,并在 Apache 许可下分发。 Activiti 可以在任何 Java 应用程序、服务器、集群中部署使用。
Flowable
面向开发人员、系统管理员和业务用户的紧凑且高效的工作流和业务流程管理 (BPM) 平台。Flowable是用Java编写的开源工作流引擎,可以执行BPMN 2.0中描述的业务流程。它是Activiti的一个积极维护的分支。
Compileflow
compileflow是一个非常轻量、高性能、可集成、可扩展的流程引擎。该引擎是淘宝工作流TBBPM引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。compileflow能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。
六、总结
最后说点我自己关于BPMN规范的想法:工具也好,规范也罢。都是为了满足我们实际所需的需求,在进行开发实现的时候,我们不要过于死板。要根据实际情况完善、优化和扩充。比如在BPMN规范中,是不允许多个数据流连到一个活动上(多脚针除外),中间需要有网关的角色。但实际开发过程中,发现网关太多以至于影响图形的可视化和可读性的时候,我们就可以通过技术性手段去简化优化相关规范。所以我不建议为了遵守规范而遵守规范,而要根据实际情况适当调整,方可开发出更有实际意义的产品。
相关文章:

BPMN2.0规范及流程引擎选型方案
BPMN2.0规范及流程引擎选型方案一、基本概念二、BPMN意义三、主要元素3.1 活动任务子流程调用活动事件子流程事务3.2 网关排他网关包容网关并行网关事件网关3.3 事件开始事件结束事件中间事件3.4 辅助泳道图注释与组数据存储四、图类型4.1 编排图4.2 会话图五、技术选型5.1 前端…...

VMware虚拟机安装Linux教程
前言 本文小新为大家带来 VMware虚拟机安装Linux教程 ,后边将为大家分享Linux系统的相关知识与操作,在此之前的第一步我们需要在我们的电脑上搭建好一个Linux系统的环境,本文的具体内容包括VMware虚拟机软件安装与Linux系统安装~ 不积跬步&a…...

多人协作|RecyclerView列表模块新架构设计
多人协作|RecyclerView列表模块新架构设计多人协作设计图新架构设计与实现设计背景与新需求新架构设计多人协作设计图 根据产品设计,将首页列表即将展示内容区域,以模块划分成多个。令团队开发成员分别承接不同模块进行开发,且互不影响任务开…...

SpringBoot (六) 整合配置文件 @Value、ConfigurationProperties
哈喽,大家好,我是有勇气的牛排(全网同名)🐮🐮🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 1 使用 Value 注解 /** Auth…...

docker 入门篇
docker为什么会出现? 一款产品:开发---->运维,两套环境!应用环境,应用配置! 常见问题:我的电脑可以运行,版本更新,导致服务不可用。 环境配置十分的麻烦,…...

MapReduce的shuffle过程详解
shuffle流程概括 因为频繁的磁盘I/O操作会严重的降低效率,因此“中间结果”不会立马写入磁盘,而是优先存储到Map节点的“环形内存缓冲区”,在写入的过程中进行分区(partition),也就是对于每个键值对来说&a…...

【软件使用】MarkText下载安装与汉化设置 (markdown快捷键收藏)
一、安装与汉化 对版本没要求的可以直接选择 3、免安装的汉化包 1、下载安装MarkText MaxText win64 https://github.com/marktext/marktext/releases/download/v0.17.1/marktext-setup.exe 使用迅雷可以快速下载 2. 配置中文语言包 中文包下载地址:GitHub - chi…...

LeetCode笔记:Biweekly Contest 99
LeetCode笔记:Biweekly Contest 99 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接:https://leetcode.com/contest/biweekly-contest-99 1. 题目一…...

初探富文本之CRDT协同实例
初探富文本之CRDT协同实例 在前边初探富文本之CRDT协同算法一文中我们探讨了为什么需要协同、分布式的最终一致性理论、偏序集与半格的概念、为什么需要有偏序关系、如何通过数据结构避免冲突、分布式系统如何进行同步调度等等,这些属于完成协同所需要了解的基础知…...

团队死气沉沉?10种玩法激活你的项目团队拥有超强凝聚力
作为项目经理和PMO,以及管理者最头疼的是团队的氛围和凝聚力,经常会发现团队死气沉沉,默不作声,你想尽办法也不能激活团队,也很难凝聚团队。这样的项目团队你很难带领大家去打胜仗,攻克堡垒。但是如何才能避…...

Spring三级缓存核心思想
spring在启动时候,会创建bean,并给bean填充属性,这事会使用到三级缓存 private final Map<String, Object> singletonObjects new ConcurrentHashMap<>(256); //一级缓存private final Map<String, Object> earlySingleto…...

深度学习算法训练和部署流程介绍--让初学者一篇文章彻底理解算法训练和部署流程
目录 1 什么是深度学习算法 2 算法训练 2.1 训练的原理 2.2 名词解释 3 算法C部署 3.1 嵌入式终端板子部署 3.3.1 tpu npu推理 3.3.2 cpu推理 3.2 服务器部署 3.2.1 智能推理 3.2.2 CPU推理 1 什么是深度学习算法 这里不去写复杂的概念,就用通俗的话说…...

计算机网络整理
TCP与UDP 介绍 HTTP:(HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。 TCP:(Transmission Contro…...

闲人闲谈PS之三十八——混合制生产下WBS-BOM价格发布增强
惯例闲话:最近中《三体》的毒很深,可能是电视剧版确实给闲人这种原著粉带来太多的感动,又一次引发了怀旧的热潮,《我的三体-罗辑传》是每天睡前必刷的视频,结尾BGM太燃了。闲人对其中一句台词感触很深——人类不感谢罗…...

Java 根类 Object
java.lang.Object 是 Java 类层次结构中的根类,所有类都直接或间接实现了此类的方法。 Object API 源码 package java.lang;public class Object {private static native void registerNatives();static {registerNatives();}public final native Class<?>…...

04_Apache Pulsar的可视化监控管理、Apache Pulsar的可视化监控部署
1.4.Apache Pulsar的可视化监控管理 1.4.1.Apache Pulsar的可视化监控部署 1.4.Apache Pulsar的可视化监控管理 1.4.1.Apache Pulsar的可视化监控部署 第一步:下载Pulsar-Manager https://archive.apache.org/dist/pulsar/pulsar-manager/pulsar-manager-0.2.0/…...

【算法】期末复盘,酒店住宿问题——勿向思想僵化前进
文章目录前言题目描述卡在哪里代码(C)前言 省流:一个人也可以住双人间,如果便宜的话。 害!尚正值青春年华,黄金岁月,小脑瓜子就已经不灵光咯。好在我在考试的最后一分钟还是成功通过了这题&am…...

Java中的Comparator 与 Comparable详解
Comparator VS Comparable1. Comparator1.1 对一维数组进行排序1.2 对二维数组进行排序1.3 对对象数组进行排序2. Comparable3. 二者区别1. Comparator 通过源码发现Comparator是一个接口。 根据compare方法中的注释可以发现方法返回三种类型的值,正数、零、负数&a…...

计算机科学导论笔记(二)
三、数据存储 3.1 数据类型 计算机行业中使用术语“多媒体”来定义包含数字、文本、音频、图像和视频的信息。 位:bit,binary digit的缩写,是存储在计算机中的最小单位,它是0或1. 位模式:为了表示数据的不同类型&a…...

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音
GEC6818开发板JPG图像显示 | 开发板实现录音一.GEC6818开发板JPG图像显示1.jpg图片特性2.如何解压缩jpg图片1.对jpegsrc.v8c.tar.gz进行arm移植2.进入~/jpeg-8c对jpeg库进行配置3.编译4.安装,将动态库存放到 /home/gec/armJPegLib5.清空编译记录6.自己查看下 /home/…...

如何判断树莓派通过GPIO与5G模块成功连接?
如果想要判断自己是否成功连接了树莓派与5G模块,可以通过以下方式进行判断: 查看设备连接状态:可以通过在树莓派终端中执行lsusb命令来查看USB设备的连接状态,如果5G模块被识别到,则会显示相关的设备信息。如果提示lsu…...

Java——包装类和List及ArrayList
目录 包装类(Wrapped Class) 包装类的使用---装箱和拆箱 自动装箱和自动拆箱 Integer的易错题 javap反编译工具 List接口的使用 方法 ArrayList 使用 打印 区别 扩容机制 ArrayList练习 字符集合 杨辉三角 编辑 包装类(Wrapped Class) Object 引用可…...

matlab - 程序流程控制、函数文件、特殊函数、调试与优化
学习视频MATLAB代码的两种执行方式:命令行、程序执行。1.程序流程控制1.1.m文件matlab中m文件分为两种:脚本文件&函数文件。脚本文件:实际上是一个命令的集合,可认为是命令行的改良版,方便我们去编写命令函数文件&…...

Toponogov 比较定理及其应用
1. Toponogov 比较定理的背景来源 Victor Andreevich Toponogov(1930-2004) 是苏联数学家,Toponogov 比较定理是他的博士论文题目,在1958年答辩。他证明这个定理是为了用于证明截面曲率假设下的分裂定理和最大直径定理࿰…...

力扣sql简单篇练习(二十二)
力扣sql简单篇练习(二十二) 1 上月播放的儿童适宜电影 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement belowSELECT titleFROM ContentWHERE kids_contentY AND content_typeMoviesAND c…...

【开源硬件】STM32F030R8T6系统板
【开源硬件】STM32F030R8T6系统板✅STM32F030R8T6系统板兼容极海APM32F030R8T6 🔰支持stm32cubemx工程配置成STM32F030R8T6生成的MDK工程,经过Keil编译后可以直接使用ST-Link v2烧录器上传到极海APM32F030R8T6芯片当中,完全做到平替使用&…...

ES之DSL查询文档基础查询
分类 query查询分类 总体规律就是逻辑性的,从外层的你干嘛,到下一层的查询类型,再到下一层的查询字段(如果需要的话)和然后是查询内容 查询所有 语法 get /索引库名/_serarch {"query":{"查询条件…...

数据结构与算法之堆排序
目录堆排序概述代码实现时间复杂度堆排序概述 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点…...

Vue3 中的模板语法
目录前言一、什么是模板语法?二、内容渲染指令1. v-text2. {{ }} 插值表达式3. v-html三、双向绑定指令1. v-model2. v-model的修饰符四、属性绑定指令1. 动态绑定多个属性值2. 绑定class和style属性五、条件渲染指令1. v-if、v-else-if、v-else2. v-show3. v-if和v…...

Redis十大类型——Hash常见操作
Redis十大类型——Hash常见操作命令操作简列存放及获取获取健值对长度元素查找列出健值对对数字进行操作赋值hsetnx很明显咯它也是以健值对方式存在的,只不过value也就是值,在这里也变成了一组简直对。 🍊个🌰: 想必多…...