Activiti 与BPMN2.0规范杂记

来源:互联网 发布:贝塔系数简易算法 编辑:程序博客网 时间:2024/05/30 23:43

启动事件:
1. 空启动
2.定时启动

<startEvent id="startevent1" name="Start">    <timerEventDefinition>        <timeCycle>R3/PT10H<timeCycle> 循环3次,间隔10小时        //<timeDuration>PT10M</timeDuration> 多少时间之后        //<timeDate>2012-12-12T00:00:00</tiemDate>在这个指定日期启动一次流程    </timerEventDefinition></startEvent>

3.异常启动

4.消息启动事件

不是通过API启动,总是在另外一个流程抛出异常结束事件的时候被触发。

观察着模式:可以通过调用API触发启动事件

<!--空启动--><startEvent id="startevent1" name="Start"></startEvent><!--activiti,formKey:关联表单,initiator:记录启动人的名称。扩展属性--><startEvent id="startevent1" activiti:fromKey = "apply.form" activiti:initiator ="startUserId" name="Start"></startEvent>

动态表单和外置表单:

外置表单:表单内容都存放在一个单独的.form 文件中。动态表单:<activiti:formProperty id = "name" name = "Name">

结束事件:
空结束

 <endEvent id="endevent1" name="End"></endEvent>

异常结束:抛出结果不能为空,注意此异常和Java异常的区别。

 <endEvent id="endevent1" name="End">     <errorEventDefinition errorRef = "AIA-001"></errorEventDefinition> </endEvent>

终止结束事件:
空结束事件结束的是一条输出流,终止结束事件,结束的是整个流程实例

取消结束
只能在子流程中使用,可以取消一个事务子流程


顺序流:默认是并行的。可以添加监听
标准顺序流: 顺序流的源,顺序流的目的模型。

<sequenceFlow id="flow3" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>

条件顺序流:在Acitviti 中设置了condition的标准顺序流就是条件顺序流。


任务:
用户任务:,人为触发,定义:任务名称,优先级,到期日,任务处理人(人,组,人+组)。

  <userTask id="usertask1" name="领导审批" activiti:assignee="deptLeader">      <potentialOwner>          <resourceAssignmentExpression>              <formalExpression>                  user(liuyang),group(leader),manager              </formalExpression>          </resourceAssignmentExpression>      <potentialOwner>  </userTask>

acitiviti:用户任务属性扩展

activiti:assignee="处理人"activiti:cadidateUsers="候选人"activiti:cadidateGroups="组"activiti:dueDate="到期日"activiti:priority="优先级0-100"

脚本任务:支持javaScript,Groovy,Juel.其他的脚本也可以使用,但是需要将jar包设置classpath:中。
scriptFormat:指定脚本语言。
activiti:resultvariable:将脚本处理的结果储存在预先定义的变量中。

Java Service任务:不属于BPMN2.0规范,是activiti扩展的。
activiti:class:实现了JavaDelegate和Activity-Behaviror 的Java类。
activiti:expression,需要执行的任务内容
activiti:delegateExpression:功能和activiti:class类似,不是实现而是动态代理。
activiti:resultvariable:使用与activiti:expression类型的Java service,存结果到变量中。
web service 任务:???

业务规则任务:业务逻辑和规则分开维护。业务数据交由规则引擎处理,规则引擎根据不同业务规则计算得出最终结果。把结果返回给调用者。
activiti:rules.在规则文件.drl中定义的规则名称。
activiti:ruleVariablesInput,业务规则执行需要的数据源。
activiti:resultVariableName,规则执行结果变量。
activiti:execlude:用来设置是否排除某些规则。true,忽略rules指定的规则。false,rules 为空,不执行规则。

邮件任务。不属于BPMN2.0规范。和Java service 类似。在serviceTask 的基础上由Activiti扩展 需要配置邮件服务器、在activiti.cfg.xml 定义的引擎属性中设置。

  <serviceTask id="mailtask1" name="Mail Task" activiti:type="mail"></serviceTask>

邮件服务器属性:
mailServerHost: 邮件服务器主机名
mailServerPort: SMTP通信端口。
mailServerDefaultFrom,发送人email.
mailServerUsername,邮件服务认证账号
mailServerPassword,邮件服务认证密码。

邮件任务的属性说明
to,收件人
from ,发件人地址
subject: 发件人email.
cc,抄送人列表
bcc,密送人列表
charset: 邮件内容字符集
text:纯文本格式的邮件内容
html:html 格式的邮件内容

<activiti field name = "to?from?bcc">    //expression = "${email}"    <activiti:expression>        <    </activiti:expression></activiti>

Camel:任务,用来解决消息路由的框架。使用Java语言编写的不包含在BPMN 2中同样是在ServiceTask 的基础上扩展的。通过activiti:delegateExpression属性指定Camel 的上下文。在运行的时候由引擎调用Camel路由处理任务。

Mule任务:是对sendTask的发送服务的扩展。

<sendTask id = "muleTask" activiti:type = "mule">

手动任务:需要人工参与建模的,Activiti 把手动任务当作空任务来处理。

接受任务:创建之后等待消息的到来,直到被RuntimeService接口的signal方法发送信号触发。

shell 任务:允许在运行过程中执行本地操作系统的脚步,命令。是Activiti基于serviceTask 扩展的一中任务

多实例:


网关: 用于控制流程走向,
排他网关:和多个条件顺序流配合使用,根据计算结果是否为true.
只认一个true,一个true都没有的时候会抛出异常。

并行网关:对并发的任务进行流程建模,线路上的条件设置会忽略。
拆分:并行执行所有的输出顺序流,并且为每一条顺序流创建一个并行的线路。
合并:所有从并行网关拆分并执行完成的线路均在此等候。

包容网关:融合了排他网关和并行网关的特性。既可以同时执行多条线路,又允许设置条件。

事件网关:专门为中间捕获事件设置的,它允许设置多个输出流指向多个不同的捕获事件(最少两个),等待中间捕获事件-中间抛出事件触发。输出类型只能是中间捕获事件,中间捕获事件的输出流只能有一个。


子流程:把一系列需要处理的任务归结到一起,作为一个大流程中的一部分。因为子流程嵌入到主流程中,所以把子流程称为嵌入式子流程。
只能包含一个i额空启动事件,至少有一个结束事件,子流程的输出流不能直接到子流程之外的活动上,如有需要通过边界事件代替。
BPMN2.0,允许子流程不包含启动结束事件,但是Activiti还不支持。

调用活动:和子流程的调用一致,表现方式不同。指定外部的流程ID。被调用的外部流程本身就是一个完整的流程。

事件子流程:不能直接启动而要被动的由其他的事件触发启动。比子流程多一个属性。
triggeredByEvent = “true”,子流程作为主流程中输出流的一个输出活动,而事件子流程是独立在主流程中的。

事务子流程:用来处理一组必须在同一个事务中完成的活动。要不一起成功,要不一起失败。


边界与中间事件:
边界事件:一个活动只能绑定一个边界事件,边界事件会一直监听所有处于运动中活动的某种事件的触发。

定时器边界事件,附属在一个非自动任务上,在流程上有任务执行完成之后开始倒计时预设的时间。

异常边界事件:用来捕获嵌入子流程或调用活动抛出的异常。
信号边界事件:捕获流程执行过程中抛出的信号。
取消边界事件:针对事务子流程设立的。捕获子流程抛出的取消事件。一个事务子流程只允许附加一个取消边界事。
补偿边界事件:用于事务子流程,针对事务失败后的业务逻辑进行补偿。

中间捕获事件:是流程的拦路虎,根据事件的不同类型需要使用不同的方式才能继续执行后续的输出流活动。必须连接一个输入流和一个输出流。

定时器中间捕获事件,两个任务中放一个定时器捕获事件,一段时间后自动执行下一个任务。
信号中间捕获事件:需要接受一个信号继续执行。广播式传播。
消息中间捕获事件:一对一传递。其他和信号中间捕获事件一致。

中间抛出事件:与中间捕获事件是两个相互依赖的关系。一般用在一个任务完成后需要发送通知或执行其他系统任务的场景。
空中间抛出事件:没有任何功能的事件,但是可以对他添加监听之类的东西
信号中间抛出事件:抛出一个信号

监听器: 是Activiti 在BPMN2.0规范上扩展的功能。监听器模式。
执行监听器:允许在执行流程过程中执行java代码。
流程实例启动,结束,输出流捕获,活动启动,结束,路由开始结束,中间事件开始结束,触发开始事件,触发结束事件。
在监听对象内的extensionElements 中添加activiti:executionListener扩展属性。
监听器执行类型:
class,实现接口。
expression,类似于EL表达式。
delegateExpression:

任务监听器:只能应用于用户任务,用来监听3中事件。
create:任务被创建所有的属性设置完成之后才触发。
assignment::在任务被分配给某个办理人之后触发。这是一个属性。一定在create之前。
complete:任务完成时,

Activiti 目前支持部分BPMN2.0规范,Activiti在其基础上进行了封装和扩展。