一、顺序流
1、条件顺序流:一个条件
2、默认顺序流: 只有在节点的其他外出顺序流不能被选中是,才会使用它作为外出顺序流继续执行。 默认顺序流的条件设置不会生效。默认顺序流通过对应节点的default属性定义
二、网关
1、排它网关: 内部是一个“X”图标,用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流会被选中,让流程继续运行。
2、并行网关: 内部是一个“加号”图标。它允许将流程 分成多条分支,也可以把多条分支 汇聚到一起
3、包含网关: 内部包含一个圆圈图标,可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
4、基于事件网关: 网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。
三、任务
1、用户任务: 用户任务用来设置必须由人员完成的工作。 当流程执行到用户任务,会创建一个新任务, 并把这个新任务加入到分配人或群组的任务列表中。
2、脚本任务: 脚本任务是一个自动节点。当流程到达脚本任务, 会执行对应的脚本。 脚本任务的流程可以访问的所有流程变量,都可以在脚本中使用。 也可以在脚本中设置流程变量,直接调用 execution.setVariable("variableName", variableValue)。
<script>
def scriptVar = "test123"
execution.setVariable("myVar", scriptVar)
</script>
3、Java服务任务: 用来调用外部java类。
4、Web Service任务: 用来同步调用一个外部的Web service
5、业务规则任务: 的功能和ServiceTask一样
6、邮件任务: 自动邮件任务
7、Mule任务: mule 是一个以Java为核心的轻量级的消息框架和整合平台
8、Camel任务: 可以从Camel发送和介绍消息
9、手工任务: 用来表示工作需要某人完成,而引擎不需要知道,手工任务是直接通过的活动, 流程到达它之后会自动向下执行。
10、Java接收任务: 接收任务是一个简单任务,它会等待对应消息的到达。
11、Shell任务: shell任务可以执行shell脚本和命令
12、执行监听器:
执行监听器可以执行外部java代码或执行表达式,当流程定义中发生了某个事件。 可以捕获的事件有:
流程实例的启动和结束。
选中一条连线。
节点的开始和结束。
网关的开始和结束。
中间事件的开始和结束。
开始时间结束或结束事件开始。
13、任务监听器:
任务监听器可以在发生对应的任务相关事件时执行自定义java逻辑 或表达式。
任务监听器支持以下属性:
event(必选):任务监听器会被调用的任务类型。 可能的类型为:
create:任务创建并设置所有属性后触发。
assignment:任务分配给一些人时触发。 当流程到达userTask, assignment事件 会在create事件之前发生。 这样的顺序似乎不自然,但是原因很简单:当获得create时间时, 我们想获得任务的所有属性,包括执行人。
complete:当任务完成,并尚未从运行数据中删除时触发。
delete:只在任务删除之前发生。 注意在通过completeTask正常完成时,也会执行。
class:必须调用的代理类。 这个类必须实现org.activiti.engine.delegate.TaskListener
接口。
public class MyTaskCreateListener implements TaskListener {
public void notify(DelegateTask delegateTask) {
// Custom logic goes here
}
}
可以使用属性注入把流程变量或执行传递给代理类。 注意代理类的实例是在部署时创建的 (和activiti中其他类代理的情况一样),这意味着所有流程实例都会共享同一个实例。
expression:(无法同时与class属性一起使用): 指定事件发生时执行的表达式。 可以把DelegateTask
对象和事件名称(使用task.eventName
) 作为参数传递给调用的对象。
<activiti:taskListener event="create" expression="${myObject.callMethod(task, task.eventName)}" />
delegateExpression可以指定一个表达式,解析一个实现了TaskListener
接口的对象, 这与服务任务一致。
<activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}" />
在activiti 5.12中,我们也介绍了新的任务监听器,org.activiti.engine.impl.bpmn.listener.ScriptTaskListener。 脚本任务监听器可以为任务监听器事件执行脚本。
四、子流程
1、子流程: 一个包含其他节点,网关,事件等等的节点。 它自己就是一个流程,同时是更大流程的一部分。
2、事件子流程: 事件子流程可以添加到流程级别或任意子流程级别。用于触发事件子流程的事件是使用开始事件配置的。
3、事务子流程: 事务子流程是内嵌子流程,可以用来把多个流程放到一个事务里。 事务是一个逻辑单元,可以把一些单独的节点放在一起,这样它们就可以一起成功或一起失败。
4、调用活动(子流程): 这个流程定义需要被很多其他流程定义调用的时候。