您的位置:首页 > 产品设计 > 产品经理

Activiti5.15学习笔记二 BPMN2.0规范

2015-08-13 18:05 633 查看
BPMN2.0规范包含很多模型,,目前Activiti可以支持在大多数情况下常用的模型,并且在实现规范的基础上进行了功能和使用性扩展。

一: BPMN2.0规范的分类:

启动和结束事件(Event)

顺序流(Sequence Flow)

任务(Task)

网关(Gateway)

子流程(Subprocess)

边界事件(Boundary Event)

中间事件(Intermediate Event)

监听器(Listener)

1、启动事件:空启动事件、定时启动事件、异常启动事件 <startEvent id="startEvent" name="Start event"></startEvent>

结束事件:空结束事件、异常结束事件、取消结束事件<endEvent id="endEvent" name="end event"></endEvent>

2、顺序流分为两种:标准顺序流 条件顺序流 <sequenceFlow id="flow" sourceRef="startEvent" targetRef="userTask"></sequenceFlow>

3、任务分为:用户任务、脚本任务、WebService任务、业务规则任务、邮件任务、Mule任务、Camel任务、手动任务、Java Service任务、Shell任务

3.1用户任务

用户任务使用userTask表示,如把任务分配给id为test的用户办理:

<userTask id="leaderAudit" name="审批">

<humanPerformer> //表示把这个任务分配给一个人

<resourceAssignmentExpression>

<formaExpression>test</formaExpression> //分配给用户test办理

</resourceAssignmentExpression>

</humanPerformer>

</userTask >

分配任务给多个候选人:

<userTask id="leaderAudit" name="审批">

<potentialOwner> //表示把这个任务分配给潜在的用户、组集合

<resourceAssignmentExpression>

<formaExpression>

user(ddd),group(leader),manager

</formaExpression> //分配给用户ddd、组leader和组manager,如果不添加user或者group关键字,BPMN2.0默认问group

</resourceAssignmentExpression>

</humanPerformer>

</userTask >

Activiti扩展的用户任务属性

Activiti:assignee 用来指定用户任务的处理人,替代了humanPerformer功能:

<userTask id="leaderAudit" name="审批" activiti:assignee="test"/>

activiti:cadidateUsers:用来指定任务的候选人,多个用逗号,代替了potentialOwner的功能:

<userTask id="leaderAudit" name="审批" activiti:cadidateUsers="test"/>

activiti:cadidateGroups :用来指定任务的候选组,多个用逗号,代替了potentialOwner的功能:

<userTask id="leaderAudit" name="审批" activiti:cadidateGroups="leader,manager"/>

activiti:dueDate:设置用户任务到期日,通常用变量代替而不是指定一个具体的日期:

<userTask id="leaderAudit" name="审批" activiti:dueDate="$(overDate)"/>

activiti:priority:用户任务优先级,取值区间[0,100]:

<userTask id="leaderAudit" name="审批" activiti:priority="$(priority)"/>

除了以上属性,Activiti还允许在用户任务上添加任务监听:create、assignment(分配任务)、complete:

<userTask id="leaderAudit" name="审批" >

<extensionElements>

<activiti:taskListener class="com.activiti.LeaderTaskListener" event="complete">

</extensionElements>

</userTask >

3.2 脚本任务:可以允许引擎依赖的语言之外的脚本语言,如JavaScript,值得注意的是,脚本任务的代码需要符合JSR-223规范:

<scriptTask id="initvars" name="初始化变量" scriptFormat="groovy">

<script>

<![CDATA[

def name = "test";

execution.setVariable('name',name);

]]>

</script>

</scriptTask>

<scriptTask id="printTask" name="输出变量" scriptFormat="groovy"> //scriptFormat用来指定符合JSR-223规范的脚本语言类型

<script><![CDATA[out:println name;]]></script>

</scriptTask>

Activiti:resultvariable:Activiti在原BPMN2.0规范的脚本任务基础上进行了扩展,可以把脚本处理的结果存为一个变量

<scriptTask id="printTask" name="输出变量" scriptFormat="juel" activiti:resultvariable="name"/>:Activiti:resultvariable指定的名称需要先定义才能使用

3.3 java Service:不属于BPMN2.0规范,是activiti扩展的专门用于java语言的ServiceTask。

<serviceTask id="mtask" name="java task" activiti:class="com.activit.JavaServiceDelegate"></serviceTask >

activiti:class:实现了接口JavaDelegate或Activity-Behaviro的java类

activiti:expression:可以使用UEL定义需要执行的任务内容,如计算公式、调用Bean对象的方法;并且的执行任务的时候可以使用流程变量作为参数。

<serviceTask id="mtask" name="java task" activiti:expression="#{leaveService.back()}"></serviceTask >

//leaveService作为一个流程变量存在,并且实现了接口JavaDelegate或Activity-Behaviro的接口

activiti:delegateExpression :功能和activiti:class类似不过不是指定一个具体的实现类,而是运行时动态设置

<serviceTask id="mtask" name="java task" activiti:delegateExpression ="${leaveBackDelegate}"></serviceTask >

activiti:resultVariable:此属性仅适用于activiti:expression类型的java Service。可以把一个表达式的执行结果保存到activiti:resultVariable指定的变量中。

<serviceTask id="mtask" name="java task" activiti:expression="#{leaveService.back()}" activiti:resultVariable=“backDate”></serviceTask >

3.4 web Service任务:可以调用外部的web Service资源

3.5 业务规则任务:根据流程变量的值处理预设的业务规则。

<businessRuleTask id="task1" name="business task" activiti:rules="rule1,rule2" //在规则文件.drl中定义的规则名称

activiti:ruleVariablesInput="${message}" //业务规则执行需要的数据源

activiti:exclude="false" //用来设置是否排除某些规则,如为false,按照activiti:rules规则执行。

activiti:resultVariableName="rulesOutput"></businessRuleTask >//规则执行结果变量,变量的值为ruleVariablesInput定义的变量集合。

3.6 邮件任务:可以通过activiti发送邮件

3.7 Camel任务:用来解决消息路由的框架。在ServiceTask的基础上由Activiti扩展而来。

3.8 Mule任务:和Camel任务功能类似。

3.9手动任务:不做任何事情,仅用来定义BMP不能完成的任务,当到达此任务是由引擎自动完成并转向下一个任务。

<manualTask id="task" name="manual task"/>

3.10接收任务 :在创建之后就等待消息的到来,直到被触发才会完成任务。

<receiveTask id="task" name=" task"/>

3.11Shell任务:允许在流程运行过程中执行本地操作系统中的脚本、命令。

4网关分为:排他网关、并行网关、包容网关、事件网关

排他网关:流程执行到该网关时,按照输入流的顺序逐个计算,当条件计算结果为true时,继续执行当前网关的输出流。图形为在菱形嵌入X。

并行网关:对并发的任务进行流程建模,图形为在菱形中嵌入一个加号+.

<parallelGateway id="fork" name="parallel"/>

包容网关:融合了排他网关和并行网关的特性,允许在每条线路上设置条件,图形为菱形嵌入圆。

事件网关:专门为中间捕获事件设置的,允许设置多个输出流指向多个不同的中间捕获事件(最少2个)

5子流程<subProcess id="subprocess1" name="子流程"></subProcess>

限制:只能且仅能包含一个空启动事件,至少要有一个结束事件,在子流程中顺序流不能直接设置输出流到子流程之外的活动上,如果需要的,可以通过边界事件代 替。

6边界与中间事件

6.1边界事件<boundaryEvent id="boundary" attachedToRef="someActivity" cancelActivity="true"><xxxxEventDefinition/></boundaryEvent>

6.1.1 定时器边界事件:和定时启动事件类似,需要附属在一个非自动任务上,在上游任务执行完成之后开始倒计时,到达时间后触发定时器边界事件的输出流。

6.1.2 异常边界事件:用来捕获嵌入子流程或调用获得抛出的异常。

6.1.3 信号边界事件:捕获流程执行过程中抛出的信号,可以“附加”在各种活动和子流程上。

6.1.4取消边界事件:专门针对事物子流程设立的。用来捕获子流程中抛出的取消事件。

6.1.5补偿边界事件:用于事物子流程中针对事物失败后的业务逻辑进行补偿。

6.1.6中间捕获事件:根据事件的不同类型需要使用不同的方式

1定时器中间捕获事件:

2信号中间捕获事件

3消息中间捕获事件

6.1.7中间抛出事件:与中间捕获事件是两个相互依赖的关系,中间捕获事件需要有事件抛出才能被触发,一般用在一个任务完成后需要发送通知或执行其他系统 任务的场景。

1、空中间抛出事件:执行到直接跳过

2、信号中间抛出事件

7监听器

7.1执行监听器:允许在执行流程过程中执行java代码或表达式。可以捕获的事件如下:

流程实例启动、结束

输出流捕获

活动启动、结束

路由开始、结束

中间事件开始、结束

触发开始事件、触发结束事件

使用扩展元素<activiti:executionListener>定义,通过event属性制定监听事件的类型(分为三类:start、end、take)

监听器执行类型 说明及实例

class 需要实现接口:org.activiti.engine.delegate.ExecutionListener

<activiti:executionListener event="start" class="com.listener.ExecutionListenerForStart">

expression 定义一个表达式,类似EL的语法。<activiti:executionListener
expreession="${pojo.method(execution.eventName)} event="end">pojo是一个bean的名称

delegateExpression 允许指定一个实现了监听接口类的name,具体的类可以在引擎中配置或由spring代理

<activiti:executionListener event="start" delegateExpression="${executionListenerBean}"/>//为bean名称

7.2任务监听器

只能用于用户任务,用来监听3种事件

create:在任务被创建且所有的任务属性设置完成之后才触发。

assignment:在任务被分配给某个办理人之后触发。

complete:在配置了监听器的上一个任务完成时触发。

3种监听器执行类型:

监听器执行类型 属性说明及实例

class 需要实现接口org.activiti.engine.delegate.TaskListener

expression 定义一个表达式,类似EL的语法。<activiti:taskListener
expreession="${pojo.method(execution.eventName)} event="end">

delegateExpression 允许指定一个实现了监听接口类的name,具体的类可以在引擎中配置或由spring代理

<activiti:taskListener event="start" delegateExpression="${executionListenerBean}"/>//为bean名称
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: