activiti BPMN---顺序流、网关、任务、子流程
更新:HHH   时间:2023-1-7


一、顺序流

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、调用活动(子流程): 这个流程定义需要被很多其他流程定义调用的时候。


返回开发技术教程...