Skip to content

什么是BPMN

BPMN(全称 Business Process Model and Notation,业务流程模型和标记法),是一个全球性的 标准业务建模及执行标准,也可以看做是一门 基于流程图的、开放标准的符号语言。该标准由 对象管理组(Object Management Group - OMG) 进行维护,与其他商业组织无关。BPMN 的前身是由 BPMI(Business Process Management Initiative,业务流程管理倡议组织)开发的 "Business Process Modeling Notation",即“业务流程建模标记法”。之后与 2005 年与 OMG 合并后在 2007 年发布 1.0 版本。

BPMN 2.0 即该标准的 2.0 版本,于 2010 年 12 月正式发布。

官方文档:https://www.omg.org/spec/BPMN/2.0/PDF 官方playRaound: https://demo.bpmn.io/s/start

该标准的主旨是:通过提供一套既符合业务人员直观又能表现复杂流程语义的标记法,同时为从事业务流程管理的技术人员和业务人员提供支持。通过引入 XML,结合 BPMN 本身定义的图形标记,可以很好的表达出整个业务流程的细节和走向,后台系统也可以通过解析 XML 来正确识别该业务流程的完整配置。而为了使这些图形标记在 能够处理流程复杂性的同时又能简单明了、通俗易懂

BPMN 规范通过定义 五个基础元素类型,并且每个类型可以通过添加额外的功能和信息来支持流程的复杂性而不会显著改变元素的基本外观。

这五个基础元素类型是:

  • Flow Object 流程对象,也可以称为 Flow Elements 流程元素
  • Data 数据对象
  • Connecting Objects 连接对象,也可以称为 Connecting Elements 连接元素
  • Swimlanes 泳道对象
  • Artifacts 工件对象

BPMN 的核心元素

流程对象(Flow Object):构成整个业务流程的主要元素对象

  • 事件(Events)作为 启动、改变或者完成一个业务流程的触发器节点,表现为一个圆形
  • 活动(Activities)主要是任务类节点或者子流程节点,表现为一个圆角矩形,在流程中主要表示 需要执行的工作或者逻辑
  • 网关(Gateways)作为流程中的一个 决策点,一般用于 根据指定条件决定流程后续走向

流程对象(Flow Object)

连接对象(Connecting Objects): 连接流程元素等元素节点并指示其流转/绑定关系

  • 顺序流(Sequence Flow)用来指示流程中的业务元素编排与执行顺序,一般显示为带箭头的实线
  • 消息流(Message Flow)消息流用于显示消息发送者和消息接收者的之间的消息流传递,一般为带起点和箭头的虚线
  • 关联(Association)用于将信息或者扩展工件(例如数据对象)与BPMN图形元素关联链接,某些情况下关联指示上可以显示箭头来指示流动方向,一般显示为 虚线或者带箭头的点状虚线

连接对象(Connecting Objects)

泳道(Swimlanes):泳道则仅包含两种元素,用来组成一个完整的泳道信息

  • 池(Pool)池对象,协作中参与者的图形表示。它还充当一个泳道“和一个用于将一组活动从其他池中分割的图形容器,通常是在B2B环境下。一般“池”都作为一个“黑匣子”,即内部信息不可见,通常显示为带名称栏的大号矩形
  • 道(Lane)泳道对象,属于 Pool 池中的子分区,将垂直或水平地扩展池的整个长度,一般表示为池中非名称栏的每一个矩形元素

泳道(Swimlanes)

数据对象(Data Object): 数据对象则一般是用来给活动或者流程等注入指定的对象数据,一般显示为一个文件符号,通过 Associations 与活动连接

附加工件(Artifacts/Artefacts): 工件对象则一般是作为特殊对象附着在某个其他元素上,根据不同情况有不同的显示形态

附加工件(Artifacts/Artefacts)

BPMN2.0结构

BPMN2.0 与 XML

当流程被转成 XML 时,所有的流程节点信息最终都会包含在一个 Definition 定义节点 中,比如下图中的流程:

Definition 定义节点

当它转换为 XML 时,则体现为如下格式:

xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" 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:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://bpmn.io/schema/bpmn">
  <process id="Process_1" isExecutable="true">
    <startEvent id="StartEvent_1" name="开始" />
    <userTask id="UserTask_1" name="执行任务" />
    <endEvent id="EndEvent_1" name="结束" />
    <sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="UserTask_1" />
    <sequenceFlow id="Flow_2" sourceRef="UserTask_1" targetRef="EndEvent_1" />
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
      <bpmndi:BPMNShape id="StartEvent_1_di" bpmnElement="StartEvent_1">
        <omgdc:Bounds x="150" y="100" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="UserTask_1_di" bpmnElement="UserTask_1">
        <omgdc:Bounds x="240" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="EndEvent_1_di" bpmnElement="EndEvent_1">
        <omgdc:Bounds x="400" y="100" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_1_di" bpmnElement="Flow_1">
        <omgdi:waypoint x="186" y="118" />
        <omgdi:waypoint x="240" y="118" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_2_di" bpmnElement="Flow_2">
        <omgdi:waypoint x="340" y="118" />
        <omgdi:waypoint x="400" y="118" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

一个完整的 BPMN 图,转换成 XML 后,它的 Business Process Model 业务流程模型DI 都包含在一个 Definition 节点中。

  • 其中 业务流程模型 数据包含在一个 process 或者 collaboration 节点中,用于 定义业务配置与流向
  • 图显示 相关的部分,则位于 bpmndi 定义的 BPMNDiagram 中,两者通过 id 属性进行关联。

什么是DI?

BPMN DI(BPMN Diagram Interchange,BPMN 图形转换)

BPMN DI 的诞生本身就是为了促进 BPMN 图 与 XML 之间的互相转换,并且为了保证转换后的 准确和清晰,BPMN DI 内部根据 OMG Diagram Definition (DD,图元定义) 划分了两种 元模型(meta-model) 类型:

  1. Diagram Commons (DC):定义了常见的类型,例如边界和字体
  2. Diagram Interchange (DI):提供了用于定义特定于领域的图模型的框架,而 BPMN DI 即是从 DI 类型中派生出来的

工作流引擎:BPMN 文件的解析与运行

虽然通过 BPMN2.0 规范可以画出 业务人员和技术人员都理解的业务流程图,也可以转换成更专业的 XML 文件。但是如何 正确解析XML文件并按照定义确保程序的正确执行 呢?此时就需要用到 工作流引擎 了。

工作流引擎(Workflow Engine,也常简称为 “流程引擎”),指将工作流作为应用系统的一部分,并为之提供 对个应用系统有决定性作用的,可根据角色、分工、条件等信息的不同决定信息传递路由、内容、等级 等功能的核心解决方案。

目前主流的开源工作流引擎包含 JBPMActiviCamundaFlowable

其中 Activiti、Flowable、Camunda 都提供了各自的 流程图编辑器,但各自的技术栈不同。而为了支持其他团队的自定义开发,Camunda 团队发布了一个独立的 JavaScript 库 - bpmn.js,用来接入开发者系统代码内支持不同的业务需求。

bpmn.js 提供了两套核心能力:

功能描述典型应用
Viewer.bpmn XML 渲染成可交互的 SVG 流程图只读的流程查看、流程监控
Modeler支持在网页中拖拽节点、连线、编辑属性,并导出为 .bpmn XML在线流程设计器

注意:

bpmn.js 本身不负责流程执行,它只负责 BPMN 2.0 文件的可视化和编辑。 要让它和 Flowable(或 Camunda、Activiti 等工作流引擎)结合,需要在前端(bpmn.js)后端(Flowable Engine) 之间建立 BPMN XML 文件的交互