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规范简述相关推荐

  1. LogicFlow 来绘制兼容 BPMN2.0 规范的流程 (React hooks版)

    Ⅰ- 壹 - 功能展示和使用需求 需求描述 使用LogicFlow来绘制兼容 BPMN2.0 规范的流程,使用react hooks 根据官方示例改的 下载图片功能只能在谷歌浏览器中使用(官方不支持其 ...

  2. BPMN2.0规范及流程引擎选型方案

    BPMN2.0规范及流程引擎选型方案 一.基本概念 二.BPMN意义 三.主要元素 3.1 活动 任务 子流程 调用活动 事件子流程 事务 3.2 网关 排他网关 包容网关 并行网关 事件网关 复杂网 ...

  3. (二)BPMN2.0规范介绍——2事件 Events

    目录 一.事件定义 1. 定时器事件定义 Timer Event Definitions (1)定义 (2)timeDate (3)timeDuration (4)timeCycle (5)ISO 8 ...

  4. 小白学流程引擎-FLowable(五) — BPMN2.0模型规范

    前言: 不用到处百度BPMN2的博客了,本篇文章带你系统掌握BPMN2规范的核心知识点.全文2万字,全覆盖BPMN2知识点,图文并茂,泡杯咖啡,慢慢细品- 一.BPMN是什么 BPMN(Busines ...

  5. 深入浅出了解BPM、BPMN、BPMN2.0

    BPM.BPMN.BPMN2.0概念介绍 基本概念 BPM(Business Process Management)业务流程管理,从管理业务流程的角度来说,我们现有的IT系统大多数都属于这一类,比如供 ...

  6. BPMN2.0协议简介

    一.BPMN是什么 如果想了解BPMN是什么,就先需要了解BPM是什么. BPM(Business Process Managment)--"通过建模.自动化.管理和优化流程,打破跨部门跨系 ...

  7. 基于BPMN2.0的工单系统架构设计(下)

    版权声明: 本文为博主原创文章,未经博主允许不得转载.关注公众号技术汇(ID: jishuhui_2015) 可联系到作者. 在上两篇文章中,介绍了BPMN2.0和工作流定义语言(以下简称WDL),以 ...

  8. Python DB-API 2.0规范

    Python DB-API 2.0规范 PEP:  249 标题: Python Database API Specification v2.0 版本: 83893e13db91 修改日期: 2008 ...

  9. USB 之一 USB2.0 规范详解 第一部分

    注意 对于物理特性仅做简单说明 主要是针对 USB 2.0 规范的前八章.后续见 第二部分 关于USB 2.0   在USB官方网站( http://www.usb.org/ )包含了我们必需的所有的 ...

最新文章

  1. docker 安装使用 mysql
  2. python apply_async数据量大不执行_apply_async里面的函数不执行
  3. 【转】C#格式化字符串
  4. some fragments
  5. python刘卫国实验题_MATLAB 程序设计与应用(刘卫国版)习题答案3-4
  6. C语言八位彩灯循环左移,利用计数器和移位寄存器设计一个八个彩灯循环电路?...
  7. 使用命令行 启动 各种服务(控制面板 开机启动项 注册表 等)
  8. Arturia Pigments for Mac - 数字波表双引擎合成器插件
  9. 图片、照片相似度批量对比
  10. 火车头伪原创接口【基于ai伪原创】
  11. mac上如何安装夜神模拟器
  12. SAS学习7(gpolt过程、gchart过程、图形输出、ods功能、假设检验,ttest过程,rank过程,秩和检验(非参数检验))
  13. 数独大师级技巧_零基础入手攻克专家级数独难题实战案例
  14. java 监测粘贴板事件_Java 监视系统剪贴板
  15. 怎样调整Firefox火狐浏览器开发者控制台字体大小
  16. php 删除文件 unlink,php 删除文件函数unlink及删除文件夹示例
  17. git小乌龟解决代码冲突
  18. 千元机Redmi 9A为何能异军突起?
  19. Go (Golang) 工具之自动化版本工具 gsemver | semver 语义化版本规范
  20. 朱萧木首谈独立创业,与罗老师总会相逢

热门文章

  1. VSCODE(三)用户界面
  2. final 修饰的成员变量必须手动初始化
  3. Go 相关问题及解决办法汇总
  4. 接口与实现基础 DAY ONE
  5. css设置高度和宽度相同
  6. 什么是云原生?聊聊云原生的今生
  7. tekton taskrun资源
  8. 如何开启 vue 项目
  9. vmware虚拟机关闭防火墙
  10. C语言牛客网(NowCoder)刷题篇