1 概述

BPMN(Business Process Model & Notation),中文名为业务流程模型与符号。BPMN2.0是OMG(Object Management Group,对象管理组织)制定的,其主要目的是既给用户提供一套简单的、容易理解的机制,以便用户创建流程模型;又能使用户能很好的处理不同流程模型内在的复杂性。

BPMN2.0提供了五种不同的元素,分别是Flow Objects 流对象、Data 数据、Connecting Objects 连接对象、Artifacts 描述对象。

image-20210207094448922.png

图1-1 BPMN2.0元素

五种不同元素中,在保持基本图形相似的前提下,BPMN2.0规范通过适当的改变每个图形元素的外观,增加额外的信息,来生成基本的图形元素的变种,以支持实际业务中的复杂性。

2 元素简介

2.1 流对象

流对象包括事件(Events),活动(Activities),网关(Gateways)。

2.1.1 事件

事件是BPMN2.0执行语义中一个非常重要的概念,是流程运行过程中发生的事情,这些事情的发生会影响到流程的运转。对每个事件而言,一般会包含两个要素,触发事件的原因与事件发生导致的结果。

事件有不同的分类方法,首先先看一张图:

图2-1 事件全览图

按照位置分类: 开始事件(Start)、中间事件(Intermediate)、结束事件(End)。通过事件控制器为系统添加辅助功能,如与其他业务系统集成、活动预警等。

事件的图像符号是圆形。其中空心圆表示开始事件,嵌套的圆表示中间事件,嵌套圆且两圆之间为阴影表示结束事件。如下图所示。

图2-2 事件的一般表示

依据触发方式不同分类:我们可以分为抛出事件(Throw),捕获事件(Catch),抛出事件是流程走到某一步主动发生的事件,捕获事件是流程定义好的触发器被触发的时候,流程就开始执行,捕获事件是被动型。

按照定义分类:分为消息(Message)事件,定时器(Timer)事件,升级(Escalation)事件,条件(Conditional)时间,链接(Link)事件,错误(Error)事件,取消(Cancel)事件,补偿(Compensation)事件,信号(Signal)事件,多重(Multiple)事件,并行(Parallel multiple)多重事件。

按照是否会中断流程运转分类:分为中断(Interrupting)事件和非中断(non-interrupting)事件。中断事件用圆实线表示,非中断事件用圆虚线表示。

图2-3 中断事件与非中断事件

2.1.2 活动

活动是流程中需要执行的任务,一个流程通常由多个活动组成。活动包含任务、子流程、事务、调用活动。

 图2-4 活动全览图

任务是工作的基本单元,是参与者为了完成流程目标而一步一步完成的动作。任务的图标是一个方框,方框左上角不同图标表示不同的任务类型。和事件一样,任务也有多种,包括发送(Send Task)任务,接收(Receive Task)任务,用户(User Task)任务,手工(Manual Task)任务,业务规则(Busniess Rule Task)任务,服务(Service Task)任务。

名称图标描述
服务(Service Task)任务

服务任务被用作调用任务,工作一般由软件自动完成,
发送(Send Task)任务

发送任务用来给外部参与者发送消息
接收(Receive Task)任务

接收任务等待特定的消息到来,在任务启动到该节点的时候停下来等待信号。当任务接收到信号的时候,该流程就会继续往下执行。
用户(User Task)任务

需要人工参与的任务,比如审批需要领导签字确认
手工(Manual Task)任务

定义流程引擎外部的任务,用来对那些需要人来完成的工作进行建模,引擎不需要知道他是系统还是 UI接口。
对引擎而言,手动任务是作为直接通过的活动处理的,流程执行到此会自动继续流程的执行 
业务规则(Busniess Rule Task)任务

业务规则任务用于同步执行一个或更多规则。

                                                         图2-5 任务全览图                                                              

  其他三个活动所用较少,本次暂不做详细介绍。

2.1.3 网关 

网关用于表示流程的分支与合并,分为:

  • 排他网关:只有一条路径会被选择
  • 并行网关:所有路径会被同时选择
  • 包容网关:可以同时执行多条线路,也可以在网关上设置条件
  • 事件网关:专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件。当流程执行到事件网关后,流程处于等待状态,需要等待抛出事件才能将等待状态转换为活动状态。

图2-6 网关全览图

2.2 数据

数据有四种元素表示,数据对象(Data Objects),数据输入(Data Inputs),数据输出(Data Outputs),数据存储(Data Stores)。

图2-7 数据全览图

2.3 连接对象

流对象彼此互相连接或者连接到其他信息的方法主要有三种。顺序流:用一个带实心箭头的实心线表示,用于指定活动执行的顺序。缺省流:默认流,即所有条件都不满足时,流程从此线出流过,进入下一阶段。条件流:依据线的条件,来判断业务流程是否能由此线流过。

 图2-8 连接对象全览图

2.4 泳道

泳池和泳道,泳池和泳道都表示活动的参与者,即表示过程中活动的执行者,它可以是一个组织、角色或系统。泳池可以划分成多个泳道,泳道具有分层结构。

图2-9 泳道全览图 

3 BPMN画图工具简介

 Camunda是一个工作流引擎,执行Bpmn2.0标准,因此依赖于基于bpmn的流程图(本质上是一个xml文件),下载地址为Download The Camunda BPMN / DMN Process Modeler | Camunda,基于 bpmn.io的面向 BPMN DMN和CMMN的集成建模解决方案,camunda-modeler是一款外部流程设计器,同普通安装软件一样安装完后双击.exe程序即可使用,也可以通过IDEA安装外部Tool使用。具体操作可参考这篇博文。这里给一个截图,以及生成的xml文档。

图3-1  Camunda工作台

对应的xml文档

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://bpmn.io/schema/bpmn" id="Definitions_0001">
  <process id="zgr-test1" name="测试条件走向" isExecutable="true">
    <startEvent id="Event_0a6bsya"></startEvent>
    <userTask id="Activity_0pfz1cb" name="第一"></userTask>
    <sequenceFlow id="Flow_0454chc" sourceRef="Event_0a6bsya" targetRef="Activity_0pfz1cb"></sequenceFlow>
    <exclusiveGateway id="Gateway_1q7504o" default="Flow_1wu0khg"></exclusiveGateway>
    <sequenceFlow id="Flow_02g6tt4" sourceRef="Activity_0pfz1cb" targetRef="Gateway_1q7504o"></sequenceFlow>
    <userTask id="Activity_19w1ng8" name="第二"></userTask>
    <sequenceFlow id="Flow_1wu0khg" sourceRef="Gateway_1q7504o" targetRef="Activity_19w1ng8"></sequenceFlow>
    <endEvent id="Event_14e42yk"></endEvent>
    <sequenceFlow id="Flow_1d0b1lk" sourceRef="Activity_19w1ng8" targetRef="Event_14e42yk"></sequenceFlow>
    <sequenceFlow id="Flow_0rdv9v5" sourceRef="Gateway_1q7504o" targetRef="Event_14e42yk">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[=${day>3}]]></conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_zgr-test1">
    <bpmndi:BPMNPlane bpmnElement="zgr-test1" id="BPMNPlane_zgr-test1">
      <bpmndi:BPMNShape bpmnElement="Event_0a6bsya" id="BPMNShape_Event_0a6bsya">
        <omgdc:Bounds height="36.0" width="36.0" x="222.0" y="202.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="Activity_0pfz1cb" id="BPMNShape_Activity_0pfz1cb">
        <omgdc:Bounds height="100.0" width="100.0" x="358.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="Gateway_1q7504o" id="BPMNShape_Gateway_1q7504o" isMarkerVisible="true">
        <omgdc:Bounds height="50.0" width="50.0" x="558.0" y="195.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="Activity_19w1ng8" id="BPMNShape_Activity_19w1ng8">
        <omgdc:Bounds height="100.0" width="100.0" x="708.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="Event_14e42yk" id="BPMNShape_Event_14e42yk">
        <omgdc:Bounds height="36.0" width="36.0" x="908.0" y="202.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="Flow_0454chc" id="BPMNEdge_Flow_0454chc">
        <omgdi:waypoint x="258.0" y="220.0"></omgdi:waypoint>
        <omgdi:waypoint x="358.0" y="220.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="Flow_02g6tt4" id="BPMNEdge_Flow_02g6tt4">
        <omgdi:waypoint x="458.0" y="220.0"></omgdi:waypoint>
        <omgdi:waypoint x="558.0" y="220.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="Flow_1wu0khg" id="BPMNEdge_Flow_1wu0khg">
        <omgdi:waypoint x="608.0" y="220.0"></omgdi:waypoint>
        <omgdi:waypoint x="708.0" y="220.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="Flow_1d0b1lk" id="BPMNEdge_Flow_1d0b1lk">
        <omgdi:waypoint x="808.0" y="220.0"></omgdi:waypoint>
        <omgdi:waypoint x="908.0" y="220.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="Flow_0rdv9v5" id="BPMNEdge_Flow_0rdv9v5">
        <omgdi:waypoint x="583.0" y="245.0"></omgdi:waypoint>
        <omgdi:waypoint x="583.0" y="420.0"></omgdi:waypoint>
        <omgdi:waypoint x="926.0" y="420.0"></omgdi:waypoint>
        <omgdi:waypoint x="926.0" y="238.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

4 写在最后

本篇博客简单的介绍了一些BPMN2.0的基本概念,只是一个入门级别,BPMN 2.0 -业务过程模型和符号这张图详细介绍了这些基本信息,第二节的图都来自这张图,有兴趣的可以下载后好好研究。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐