前提
流程中的网关用于控制顺序流的分支和汇合,如果不需要进行顺序流的控制,则可以不使用网关。
一、互斥网关(单行网关)
1、互斥网关就好像一个人走到了一个岔路口,只能选择一条路前进,至于选择哪条路由顺序流的条件决定;也就是从互斥网关输出的顺序流1和顺序流2都被设置的有条件;
(1)、如果只有一个顺序流的条件满足要求,则就走这个顺序流;
(2)、如果有多个顺序流的条件满足要求,则哪个顺序流的定义在流程文件中靠前,走哪个顺序流;
(3)、如果没有顺序流的条件满足要求,则抛出异常。
二、并行网关
1、并行网关对执行流会有两种行为:分岔和合并;
(1)、分岔(上图中的第一个并行网关):可以让一个执行流变为多个同时进行的并发执行流;从并行网关输出的顺序流1和顺序流2中不用设置条件,就算设置条件,并行网关也会忽略,因为他们不使用条件进行判断。
(2)、合并(上图中的第二个并行网关):可以让多个执行流合并为一个执行流;
2、并行网关并不要求成对出现,即有了分岔并不一定有合并,有了合并也不一定有分岔;
3、一个并行网关允许同时出现分岔和合并两种行为,即多个执行流到达该并行网关时被合并,然后随机又被分岔为多个执行流。
三、兼容网关
1、兼容网关就好像是互斥网关和并行网关的结合体,即可以当互斥网关使用,也可以当并行网关使用;
2、当互斥网关使用时,需要为从兼容网关输出的顺序流1和顺序流2设置条件:
(1)、如果只有一个顺序流的条件满足要求,则就走这个顺序流;
(2)、如果有多个顺序流的条件满足要求,则会并行走满足条件的所有顺序流;(这点和互斥网关有区别,互斥网关是哪个顺序流的定义在流程文件中靠前,走哪个顺序流);
(3)、如果没有顺序流的条件满足要求,则抛出异常。
3、当并行网关使用时,不能为从兼容网关输出的顺序流1和顺序流2设置条件;这样以来它就和并行网关的特性一模一样,既有分岔行为也有合并行为,且处理方式也和并行网关一致。
四、事件网关
1、事件网关是根据它所连接的中间Catching事件来决定流程的走向;
2、上图中事件网关直接连接了顺序流1和顺序流2,顺序流1直接连接了信号事件,顺序流2直接连接了定时器事件;
3、有些同学会有以下疑惑:当流程走到事件网关时,并不知道是往顺序流1走?还是往顺序流2走?因为只有走了顺序流1或者顺序流2后才能到达各自连接的事件,然后才能根据事件进行判断;这样以来就出现了走向选择的问题。
4、实际上当流程走到事件网关时,并不会立马选择走顺序流1还是走顺序流2,而是Activiti会为全部的中间Catching事件创建相应的数据,当某个中间事件先被触发了,流程就会选择触发事件所在的顺序流走下去。
Activiti 使用网关元素来控制流程的分支和汇聚路径。网关可以实现复杂的分支逻辑和多条并行执行的任务,增加了流程的灵活性。以下是 Activiti 中几种常见的网关类型:
- 互斥网关(Exclusive Gateway):互斥网关用于实现分支条件。当满足条件时,流程会进入网关的对应分支执行;当不满足条件时,则会进入网关后面的默认分支。互斥网关有且只有一个输出流。
- 并行网关(Parallel Gateway):并行网关用于实现并行执行的任务。当流程到达网关时,它会分成两个或多个具有相同开始时间的分支执行,并将结果汇聚到下一个任务中。并行网关有一个输入流和两个或多个输出流。
- 兼容网关(Inclusive Gateway):兼容网关用于实现一个或多个分支条件的条件均满足时继续执行的情况。流程会沿着满足条件的所有分支执行,最后将所有结果汇聚到下一步骤中。兼容网关可以有两个或多个输出流。
- 事件网关(Event-based Gateway):事件网关用于在流程中等待事件的发生。当事件发生时,网关检查有哪些分支条件被满足,然后进入对应的路径继续执行。事件网关可以有一个或多个输出流,每个输出流都有一个关联的事件定义。
以上是 Activiti 中四种常见的网关类型,每个网关都有其特定的适用场景,可以根据具体情况选择使用。
五、设置审批规则
1、审批模式
单签模式:一个任务节点只能选择一个人或岗位;
会签模式:一个任务节点可以选多人和多岗位,需要所有人和所有岗位都通过,才能进入下一个任务节点;
或签模式:一个任务节点可以选多人和多岗位,有一个人或一个岗位通过,就可以进入下一个任务节点。
2、连续审批是否跳过
连续任务节点都是同一个人,并且都开启连续审批跳过,将跳过多个连续相同的任务节点,进入到下一个任务节点。