本文主要是介绍Activiti5.15学习笔记二 BPMN2.0规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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名称
这篇关于Activiti5.15学习笔记二 BPMN2.0规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!