一、BPMN2.0
BPMN2.0(Business Process Model And Notation,业务流程模型和符号),是一种业务流程建模规范,提供了一套对业务流程建模的标记语言。起初由BPMI(The Business Process Management Initiative)在2004年推出BPMN1.0版本,后BPMI并入到OMG组织,OMG于2011年推出BPMN2.0标准。BPMN的主要目标是提供一套被所有业务用户容易理解和使用的标准符号,利用这些符号将业务流程建模简单化、图形化,将复杂的建模过程视觉化,让业务建模者、业务实施人员、管理监督人员对BPMN描述的业务流程有一个更加清晰明了的认识。从业务流程建模分析到流程的实现,直到最终用户的管理监控,BPMN2.0都贯穿其中。可以说BPMN在业务流程设计(业务流程图)与流程实现(工作流引擎)之间搭建了一条标准化的桥梁。
一句话BPMN2.0帮助我们规范的画流程图。
1.1 BPMN2.0规范的基础元素
1.1.1 流对象(Flow Objects)
包括事件、活动、网关,是BPMN中的核心元素。
1. 事件
用于对流程生命周期中发生的事件进行建模。
开始事件:开始事件指示流程从何处开始
定义:没有启动事件,需要调用startProcessInstanceByXXX方法执行该空开始事件。<startEvent id="start" name="my start event" />
中间事件
结束事件:标志着流程的结束
定义:没有结束事件,当流程引擎检测到执行到该空结束事件时会自动执行,已结束整个流程。<endEvent id="end" name="my end event" />
边界事件
2. 活动(任务)
定义:任务表示流程中具体要做的事情,通常一个任务表示工作需要被外部实体完成,比如人工任务和自动服务。
图形表示:任务通常有圆角矩形表示,内部文字为任务名称或描述,左上角的图标表示任务类型。
人工任务(user task)
定义:最典型的任务。需要由人工来完成的任务,比如请假审批、财务审核等。
id是必须的,name是可选的,通过documentation元素对任务进行描述。任何bpmn2.0元素都可用documentation元素进行描述。
|
可通过dueDate字段设置任务的到期时间。
人工任务可分配给三种人:assignee(办理人、受让人),candidate(候选人),candidateGroup(候选人组)
- assignee是任务的实际办理人,任务只能同时有一个办理人。
- 任务可以有多个候选人,每个候选人都能看到该任务,候选人需要claim(拾取)任务成为assignee后,才能进行任务的办理,任务被拾取后其他候选人就看不到该任务了。候选人在拾取任务后可以unclaim,将任务归还,此时其他候选人可以看到并claim任务。
- 不想单独指定多个候选人,可以指定一个候选人组,一般为角色ID。
分配方式有三种:
- 画图时写死。
- 通过UEL表达式动态设置。
- 通过TaskListener监听器指定。
java服务任务(service task)
定义:用于调用外部Java代码。
|
脚本任务(script task)
定义:用于执行脚本文件(如javascript)
|
web服务任务
定义:用于调用外部web接口服务。
邮件任务(acticiti专有,非BPMN2.0规范)
定义:用于发送邮件。
3. 网关(节点)
作用:用来控制流程的流向。
图形表示:网关通常以菱形图形表示,内部带有一个图标。该图标显示网关的类型。
排他网关(exclusiveGateway)
定义:也叫XOR网关,对所有的传出分支进行条件判断,仅选择一个条件为true的分支执行,当有多个分支条件满足时,默认执行xml中定义的第一个。若多个分支条件都不满足时,就走默认顺序流。如果没有默认顺序流,将抛出异常。
|
并行网关(parallelGateway)
定义:并行网关模拟多个同时并行执行的流程这种情况。
特点:
- 具有fork-join行为(发散和汇聚,想起了java中的fork-join线程框架),即从并行网关传出的流程会并行执行,传入并行网关的流程会进入里面等待,知道并行的流程都进入到并行网关后,再一起发散出去。
- 并行网关忽略分支的条件判断。
|
包含网关(inclusiveGateway)
定义:看作是排他网关和并行网关的组合,包含网关既能进行条件判断,又能并行执行多个分支。
|
1.1.2 顺序流
定义:顺序流就是事件,活动和网关之间的连线,显示为一条实线 带有箭头,在BPMN图形中每个顺序流都有一个源头和一个 目标引用,包含了 活动,事件或网关的id。
|
1. 条件顺序流
定义:给顺序流添加表达式条件,当条件判断为true时,该顺序流将会被执行。这意味着如果多个顺序流的条件都为true时,会有多个顺序流并行执行。