BPMN2.0规范简述
BPMN2.0规范
- 简介
- 主要图元
- 启动事件
- 结束事件
- 顺序流
- 任务
- 网关
- 流程图例
简介
BPMN的全称为Business Process Model And Notation,中文为业务流程模型与符号,由标准组织BPMN发布,BPMN 1.0规范在2004年5月发布,最新的BPMN2.0规范于2011年12月发布。目前该规范已被各大厂商、开源社区所接受,基于该规范设计流程引擎或兼容该规范,使得流程建模有了统一的标准。
可以从https://www.omg.org/spec/BPMN/2.0/获取官方发布的规范文档。
BPMN2.0规范的重点在于定义执行语义和通用的建模交换格式,这样流程建模数据可以在基于BPMN2.0规范的设计器和引擎上设计与执行。
下面主要讲解BPMN2.0中主要图元的含义与用法。
主要图元
启动事件
用于表示一个流程的开始,启动事件是一个大类,BPMN2.0规范中共定义了7种类型,如下主要说明常用的3种类型。
- 空启动事件
空启动事件是流程建模中最常用的启动事件,在XML中的代码如下:
<startEvent id="StartEvent_0to3od1" name="开始"/>
- 定时启动事件
定时启动事件可以一次性定时启动或者特定时间间隔后启动,在XML中代码如下:
<startEvent id="Event_0g6d39e"><timerEventDefinition><timeCycle></timeCycle></timerEventDefinition>
</startEvent>
其中timerEventDefinition支持如下节点设置定时规则
- 消息启动事件
消息启动事件通过一个消息名称触发,在XML中代码如下:
<startEvent id="Event_0ry7h7s"><messageEventDefinition id="MessageEventDefinition_1beh49z" />
</startEvent>
结束事件
用于表示一个流程的结束,BPMN2.0规范中共定义了9种类型,如下主要说明常用的3种类型。
- 空结束事件
空结束事件表示流程正常结束,没有其他后续处理,在XML中的代码如下:
<endEvent id="Event_16b145j" name="结束"/>
- 异常结束事件
在流程执行过程中抛出了特定的错误代码,如果存在对应的异常开始事件,则触发异常开始事件,否则按照空结束时间处理,在XML中的代码如下:
<endEvent id="Event_1xytvvd"><errorEventDefinition errorRef="ERRORCODE_001" />
</endEvent>
- 终止结束事件
终止结束事件可以终止一个流程实例,当流程流传到该结束事件时,表示要终止流程实例(具体由流程引擎实现),在XML中的代码如下:
<endEvent id="Event_09oopgk"><terminateEventDefinition/>
</endEvent>
顺序流
顺序流连接2个流程图元,流程运行时会沿着顺序流运行,直至流程结束。顺序流分为如下2种类型。
- 标准顺序流
用来连接两个或多个流程图元,在XML中的代码如下:
其中sourceRef 属性指定顺序流的源图元id, 使用 targetRef 指定顺序流的目标图元id
<sequenceFlow id="Flow_0jde5wk" sourceRef="Gateway_0a25gry" targetRef="Activity_00wv1j0" />
- 条件顺序流
条件顺序流可以添加条件表达式或规则(各流程引擎都会实现各自的规则运算),当条件满足时,则流程流传到顺序流的目标图元。当源图元是单一网关时,会使用默认的条件顺序流,即网关的其他分支条件不通过时,则走默认分支。
顺序流在XML中的代码如下:
<sequenceFlow id="Flow_1llw3na" sourceRef="Gateway_0riripr" targetRef="Activity_1hu5eqt" ><conditionExpression>{条件表达式或规则内容}</conditionExpression>
</sequenceFlow>
任务
任务在BPMN2.0中是非常重要的部分。任务根据业务要求分为多种类型,下面主要说明常用的2中任务。
- 人工任务
人工任务是需要有人来参与的任务,如审批任务,人工任务需定义任务的参与者,可以为用户组或个人,如果为会签任务,可以是多个人参与。在XML中的代码如下:
除了BPMN2.0规范定义的节点属性,各流程引擎在实现规范时会自定义扩展属性存放参与者信息,如该任务的处理人。
<userTask id="Activity_1maa7u0" name="填单"><incoming>Flow_02f275b</incoming><outgoing>Flow_1llw3na</outgoing>
</userTask>
- 服务任务
服务任务是使用某种服务的任务,该服务可以是Web服务或自动化应用,不需要参与者人单独处理。当顺序流执行到该活动时,服务任务绑定的服务会被执行,执行完后,顺序流会继续往后流转,直到下一个人工任务或结束。
在XML中的代码如下:
各流程引擎会通过自定义扩展属性存放待执行的服务名称或地址。
<serviceTask id="Activity_0c9bog4" name="服务"><incoming>Flow_0ca61er</incoming><outgoing>Flow_07ndt5l</outgoing>
</serviceTask>
网关
网关用于控制顺序流在流程中收敛和发散时的交互方式,BPMN2.0规范中共有6种类型的网关,这里主要说明如下3种。
此外某些流程引擎会实现一种自选网关,由用户来选择要流转的顺序流。
- 单一网关
单一网关会逐个计算输出顺序流的条件,当为true时,则流程会沿着该顺序流完后流转,其他分支条件即使为true也忽略。但当所有分支均为false,则流程引擎会抛出异常。不过如果指定了默认分支,其他分支为false的情况下,则会流转到默认分支的顺序流,通过default属性指定。
在XML中的代码如下:
<exclusiveGateway id="Gateway_11lk0du" default="Flow_06eq303"><incoming>Flow_09w8aw9</incoming><outgoing>Flow_06eq303</outgoing><outgoing>Flow_0ca61er</outgoing>
</exclusiveGateway>
- 多路网关
多路网关与单一网关类似,会逐个计算输出顺序流的条件,所有为true的顺序流都会流转,即流程运行会存在并行。多路网关也存在默认分支,其他分支为false的情况下,则会流转到默认分支的顺序,通过default属性指定。
在XML中的代码如下:
<inclusiveGateway id="Gateway_11lk0du" default="Flow_06eq303"><incoming>Flow_09w8aw9</incoming><outgoing>Flow_06eq303</outgoing><outgoing>Flow_0ca61er</outgoing>
</inclusiveGateway>
- 并行网关
并行网关用于并发的任务流转,顺序流上没有条件设置,每个顺序流都会执行。
在XML中的代码如下:
<parallelGateway id="Gateway_11lk0du"><incoming>Flow_09w8aw9</incoming><outgoing>Flow_06eq303</outgoing><outgoing>Flow_0ca61er</outgoing>
</parallelGateway>
流程图例
以下流程图在https://demo.bpmn.io/new中在线绘制。
符合BPMN2.0规范的完整流程图XML如下:
其中definitions为根节点,其下级可以存在多个process流程图节点;
process下则为流程图元的定义。
bpmndi:BPMNDiagram为流程图的形状大小及位置信息。
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0hpv0ew" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="7.2.0"><bpmn:process id="Process_16el6z5" isExecutable="false"><bpmn:startEvent id="StartEvent_1th90s4" name="开始"><bpmn:outgoing>Flow_0ju27zd</bpmn:outgoing></bpmn:startEvent><bpmn:userTask id="Activity_0hguomk" name="填单"><bpmn:incoming>Flow_0ju27zd</bpmn:incoming><bpmn:outgoing>Flow_09w8aw9</bpmn:outgoing></bpmn:userTask><bpmn:sequenceFlow id="Flow_0ju27zd" sourceRef="StartEvent_1th90s4" targetRef="Activity_0hguomk" /><bpmn:endEvent id="Event_1wjfaqe" name="结束"><bpmn:incoming>Flow_0yj5y67</bpmn:incoming></bpmn:endEvent><bpmn:sequenceFlow id="Flow_09w8aw9" sourceRef="Activity_0hguomk" targetRef="Gateway_11lk0du" /><bpmn:sequenceFlow id="Flow_06eq303" sourceRef="Gateway_11lk0du" targetRef="Activity_0r5hia4" /><bpmn:sequenceFlow id="Flow_0ca61er" name="条件" sourceRef="Gateway_11lk0du" targetRef="Activity_0c9bog4" /><bpmn:sequenceFlow id="Flow_07ndt5l" sourceRef="Activity_0c9bog4" targetRef="Gateway_0chxiat" /><bpmn:sequenceFlow id="Flow_0ccywy4" sourceRef="Activity_0r5hia4" targetRef="Gateway_0chxiat" /><bpmn:sequenceFlow id="Flow_0yj5y67" sourceRef="Gateway_0chxiat" targetRef="Event_1wjfaqe" /><bpmn:userTask id="Activity_0r5hia4" name="审核"><bpmn:incoming>Flow_06eq303</bpmn:incoming><bpmn:outgoing>Flow_0ccywy4</bpmn:outgoing></bpmn:userTask><bpmn:serviceTask id="Activity_0c9bog4" name="服务"><bpmn:incoming>Flow_0ca61er</bpmn:incoming><bpmn:outgoing>Flow_07ndt5l</bpmn:outgoing></bpmn:serviceTask><bpmn:exclusiveGateway id="Gateway_11lk0du" default="Flow_06eq303"><bpmn:incoming>Flow_09w8aw9</bpmn:incoming><bpmn:outgoing>Flow_06eq303</bpmn:outgoing><bpmn:outgoing>Flow_0ca61er</bpmn:outgoing></bpmn:exclusiveGateway><bpmn:exclusiveGateway id="Gateway_0chxiat"><bpmn:incoming>Flow_07ndt5l</bpmn:incoming><bpmn:incoming>Flow_0ccywy4</bpmn:incoming><bpmn:outgoing>Flow_0yj5y67</bpmn:outgoing></bpmn:exclusiveGateway></bpmn:process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_16el6z5"><bpmndi:BPMNEdge id="Flow_0ju27zd_di" bpmnElement="Flow_0ju27zd"><di:waypoint x="192" y="219" /><di:waypoint x="280" y="219" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_09w8aw9_di" bpmnElement="Flow_09w8aw9"><di:waypoint x="380" y="219" /><di:waypoint x="435" y="219" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_06eq303_di" bpmnElement="Flow_06eq303"><di:waypoint x="460" y="194" /><di:waypoint x="460" y="120" /><di:waypoint x="580" y="120" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_0ca61er_di" bpmnElement="Flow_0ca61er"><di:waypoint x="460" y="244" /><di:waypoint x="460" y="320" /><di:waypoint x="580" y="320" /><bpmndi:BPMNLabel><dc:Bounds x="464" y="279" width="22" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_07ndt5l_di" bpmnElement="Flow_07ndt5l"><di:waypoint x="680" y="320" /><di:waypoint x="790" y="320" /><di:waypoint x="790" y="244" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_0ccywy4_di" bpmnElement="Flow_0ccywy4"><di:waypoint x="680" y="120" /><di:waypoint x="790" y="120" /><di:waypoint x="790" y="194" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_0yj5y67_di" bpmnElement="Flow_0yj5y67"><di:waypoint x="815" y="219" /><di:waypoint x="922" y="219" /></bpmndi:BPMNEdge><bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1th90s4"><dc:Bounds x="156" y="201" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="163" y="244" width="22" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_13t3ktw_di" bpmnElement="Activity_0hguomk"><dc:Bounds x="280" y="179" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Event_1wjfaqe_di" bpmnElement="Event_1wjfaqe"><dc:Bounds x="922" y="201" width="36" height="36" /><bpmndi:BPMNLabel><dc:Bounds x="929" y="244" width="22" height="14" /></bpmndi:BPMNLabel></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_1hee9yq_di" bpmnElement="Activity_0r5hia4"><dc:Bounds x="580" y="80" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_0inkrx9_di" bpmnElement="Activity_0c9bog4"><dc:Bounds x="580" y="280" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Gateway_0np8j7w_di" bpmnElement="Gateway_11lk0du" isMarkerVisible="true"><dc:Bounds x="435" y="194" width="50" height="50" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Gateway_1t8b9vq_di" bpmnElement="Gateway_0chxiat" isMarkerVisible="true"><dc:Bounds x="765" y="194" width="50" height="50" /></bpmndi:BPMNShape></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</bpmn:definitions>
BPMN2.0规范简述相关推荐
- LogicFlow 来绘制兼容 BPMN2.0 规范的流程 (React hooks版)
Ⅰ- 壹 - 功能展示和使用需求 需求描述 使用LogicFlow来绘制兼容 BPMN2.0 规范的流程,使用react hooks 根据官方示例改的 下载图片功能只能在谷歌浏览器中使用(官方不支持其 ...
- BPMN2.0规范及流程引擎选型方案
BPMN2.0规范及流程引擎选型方案 一.基本概念 二.BPMN意义 三.主要元素 3.1 活动 任务 子流程 调用活动 事件子流程 事务 3.2 网关 排他网关 包容网关 并行网关 事件网关 复杂网 ...
- (二)BPMN2.0规范介绍——2事件 Events
目录 一.事件定义 1. 定时器事件定义 Timer Event Definitions (1)定义 (2)timeDate (3)timeDuration (4)timeCycle (5)ISO 8 ...
- 小白学流程引擎-FLowable(五) — BPMN2.0模型规范
前言: 不用到处百度BPMN2的博客了,本篇文章带你系统掌握BPMN2规范的核心知识点.全文2万字,全覆盖BPMN2知识点,图文并茂,泡杯咖啡,慢慢细品- 一.BPMN是什么 BPMN(Busines ...
- 深入浅出了解BPM、BPMN、BPMN2.0
BPM.BPMN.BPMN2.0概念介绍 基本概念 BPM(Business Process Management)业务流程管理,从管理业务流程的角度来说,我们现有的IT系统大多数都属于这一类,比如供 ...
- BPMN2.0协议简介
一.BPMN是什么 如果想了解BPMN是什么,就先需要了解BPM是什么. BPM(Business Process Managment)--"通过建模.自动化.管理和优化流程,打破跨部门跨系 ...
- 基于BPMN2.0的工单系统架构设计(下)
版权声明: 本文为博主原创文章,未经博主允许不得转载.关注公众号技术汇(ID: jishuhui_2015) 可联系到作者. 在上两篇文章中,介绍了BPMN2.0和工作流定义语言(以下简称WDL),以 ...
- Python DB-API 2.0规范
Python DB-API 2.0规范 PEP: 249 标题: Python Database API Specification v2.0 版本: 83893e13db91 修改日期: 2008 ...
- USB 之一 USB2.0 规范详解 第一部分
注意 对于物理特性仅做简单说明 主要是针对 USB 2.0 规范的前八章.后续见 第二部分 关于USB 2.0 在USB官方网站( http://www.usb.org/ )包含了我们必需的所有的 ...
最新文章
- docker 安装使用 mysql
- python apply_async数据量大不执行_apply_async里面的函数不执行
- 【转】C#格式化字符串
- some fragments
- python刘卫国实验题_MATLAB 程序设计与应用(刘卫国版)习题答案3-4
- C语言八位彩灯循环左移,利用计数器和移位寄存器设计一个八个彩灯循环电路?...
- 使用命令行 启动 各种服务(控制面板 开机启动项 注册表 等)
- Arturia Pigments for Mac - 数字波表双引擎合成器插件
- 图片、照片相似度批量对比
- 火车头伪原创接口【基于ai伪原创】
- mac上如何安装夜神模拟器
- SAS学习7(gpolt过程、gchart过程、图形输出、ods功能、假设检验,ttest过程,rank过程,秩和检验(非参数检验))
- 数独大师级技巧_零基础入手攻克专家级数独难题实战案例
- java 监测粘贴板事件_Java 监视系统剪贴板
- 怎样调整Firefox火狐浏览器开发者控制台字体大小
- php 删除文件 unlink,php 删除文件函数unlink及删除文件夹示例
- git小乌龟解决代码冲突
- 千元机Redmi 9A为何能异军突起?
- Go (Golang) 工具之自动化版本工具 gsemver | semver 语义化版本规范
- 朱萧木首谈独立创业,与罗老师总会相逢