Activiti的排他网关、并行网关、

activiti工作流中我们经常用到的网关有两种:

1. Exclusive Gateway 排他网关

Activiti的排他网关、并行网关、

排他网关.png

排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在> 流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选中,让流程继续运行。

注意这里的外出顺序流 与 BPMN 2.0 通常的概念是不同的。通常情况下,所有条件结果> 为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常


排他网关示意图.png

Activiti的排他网关、并行网关、

上图是使用activiti modeler在线设计时候的截图

排他网关有点像java里面 if ... else if ... 每一个分支线上都要指定一个条件,可以有多条分支线,分支线的的变量需要在网关之前就设置到流程变量中。

举个栗子,可以在我上面图里面usertask这个节点添加一个执行监听器


1).一个排他网关对应一个以上的顺序流

2).由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果。

3).决策网关只会返回一条结果。当流程执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索如果发现第一条决策结果为true或者没有设置条件的(默认为成立),则流出。

4).如果没有任何一个出口符合条件,则抛出异常

5).使用流程变量,设置连线的条件,并按照连线的条件执行工作流,如果没有条件符合的条件,则以默认的连线离开。例如



二、并行网关  。注意看图的红色部分,他们的线是不一样的!!!

Activiti的排他网关、并行网关、


说明:

1).一个流程中流程实例只有1个,执行对象有多个

2).并行网关的功能是基于进入和外出的顺序流的:

分支(fork): 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

汇聚(join): 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

3).并行网关的进入和外出都是使用相同节点标识

4).如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。

5).并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

6).并行网关不需要是“平衡的”(比如, 对应并行网关的进入和外出节点数目不一定相等)。如图中标示是合法的:

Activiti的排他网关、并行网关、