流程引擎-activiti7

一、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元素进行描述。

<userTask id="theTask" name="Schedule meeting" > <documentation> Schedule an engineering meeting for next week with the new hire. </documentation> </userTask>

可通过dueDate字段设置任务的到期时间。

人工任务可分配给三种人:assignee(办理人、受让人),candidate(候选人),candidateGroup(候选人组)

  • assignee是任务的实际办理人,任务只能同时有一个办理人。
  • 任务可以有多个候选人,每个候选人都能看到该任务,候选人需要claim(拾取)任务成为assignee后,才能进行任务的办理,任务被拾取后其他候选人就看不到该任务了。候选人在拾取任务后可以unclaim,将任务归还,此时其他候选人可以看到并claim任务。
  • 不想单独指定多个候选人,可以指定一个候选人组,一般为角色ID。

分配方式有三种:

  • 画图时写死。
  • 通过UEL表达式动态设置。
  • 通过TaskListener监听器指定。
java服务任务(service task)

定义:用于调用外部Java代码。

<serviceTask id="javaService" name="My Java Service Task" activiti:class="org.activiti.MyJavaDelegate" />
脚本任务(script task)

定义:用于执行脚本文件(如javascript)

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy"> 
<script>
sum = 0
for ( i in inputArray ) {
sum += i
}
</script>
</scriptTask>
web服务任务

定义:用于调用外部web接口服务。

邮件任务(acticiti专有,非BPMN2.0规范)

定义:用于发送邮件。

3. 网关(节点)

作用:用来控制流程的流向。
图形表示:网关通常以菱形图形表示,内部带有一个图标。该图标显示网关的类型。

排他网关(exclusiveGateway)

定义:也叫XOR网关,对所有的传出分支进行条件判断,仅选择一个条件为true的分支执行,当有多个分支条件满足时,默认执行xml中定义的第一个。若多个分支条件都不满足时,就走默认顺序流。如果没有默认顺序流,将抛出异常。

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />
并行网关(parallelGateway)

定义:并行网关模拟多个同时并行执行的流程这种情况。
特点:

  1. 具有fork-join行为(发散和汇聚,想起了java中的fork-join线程框架),即从并行网关传出的流程会并行执行,传入并行网关的流程会进入里面等待,知道并行的流程都进入到并行网关后,再一起发散出去。
  2. 并行网关忽略分支的条件判断。
<parallelGateway id="myParallelGateway" />
包含网关(inclusiveGateway)

定义:看作是排他网关和并行网关的组合,包含网关既能进行条件判断,又能并行执行多个分支。

<inclusiveGateway id="myInclusiveGateway" />

1.1.2 顺序流

定义:顺序流就是事件,活动和网关之间的连线,显示为一条实线 带有箭头,在BPMN图形中每个顺序流都有一个源头和一个 目标引用,包含了 活动,事件或网关的id。

<sequenceFlow id="myFlow" name="MyFlow" sourceRef="sourceId" targetRef="targetId" />

1. 条件顺序流

定义:给顺序流添加表达式条件,当条件判断为true时,该顺序流将会被执行。这意味着如果多个顺序流的条件都为true时,会有多个顺序流并行执行。

2. 默认顺序流

1.1.3 泳道(Swimlanes)

1.1.4 人工产物