Activiti理论学习-2--顺序流、网关

1.顺序流

顺序流是两个模型之间的连接者,可以把顺序流比作是人体的动脉,每一条连接到不同的器官。顺序流分为两类:标准顺序流,条件顺序流。

1.1标准顺序流

标准顺序流:只有在节点的其他外出顺序流不能被选中时,才会使用它作为外出顺序流继续执行。 标准顺序流的条件设置不会生效,标准顺序流通过对应节点的default属性定义。
可以用来连接两个或者多个模型建立关系。
默认的顺序流
对应的Xml

 <sequenceFlow id="_5" sourceRef="start" targetRef="_3"/>

1.2条件顺序流

条件顺序流:一个条件,在标准顺序流上添加了条件表达式,只有满足了条件表达式才能通过顺序流到达目标活动。
条件顺序流
对应的Xml

<sequenceFlow id="_4" sourceRef="_3" targetRef="_2">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[isLeader]]></conditionExpression>
</sequenceFlow>

2.网关

网关用来控制流程的流向(或像BPMN 2.0里描述的那样,流程的tokens。) 网关可以消费也可以生成token。网关显示成菱形图形,内部有一个小图标。 图标表示网关的类型。
网关

2.1排他网关

当你的流程出现这样的场景:请假申请,三天以内,部门经理审批流程就结束了,三天以上需要总经理,这个时候就需要排他网关

排它网关(也叫异或(XOR)网关,或叫基于数据的排他网关): 内部是一个“X”图标,用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流会被选中,让流程继续运行。

注意:排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只选择一条分支去执行)

不使用排他网关也可以实现分支:
不使用排他网关
上图中,在连线的condition条件上设置分支条件;
缺点:如果条件都不满足,不使用排他网关,流程就结束了(是异常结束);
使用排他网关决定分支的走向:
使用排他网关
如果从网关出去的线所有条件都不满足则系统抛出org.activiti.engine.ActivitiException异常;
说明:经过排他网关必须要有一条且只有一条分支走;

2.2并行网关

当出现这样的场景:请假申请开始,需要项目经理和部门经理都审批,两者没有前后需要两个人全部审批才能进入下个节点。这个时候就需要并行网关

并行网关: 内部是一个“加号”图标。它允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的。
并行网关

  1. 分支:
        并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
  2. 汇聚:
        所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

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

与其他网关的主要区别:
并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

2.3包含网关

当出现这样的场景:你申请请假,如果是病假,找项目经理审批,如果不是,找部门经理审批。但是他俩不管谁签完都可以进行下个节点。说白了就像是排他跟并行的合体

包含网关: 内部包含一个圆圈图标,可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
包含网关

  • 分支:所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
  • 汇聚:所有并行分支到达包含网关,会进入等待平台, 直到每个包含流程token的进入顺序流的分支都到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。

注意:如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时含有分支和汇聚功能。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。

2.4事件网关

基于事件网关: 网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。
注意:基于事件网关的外出顺序流和普通顺序流不同。这些顺序流不会真的"执行"。 相反,它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件。 要考虑以下条件:

  • 基于事件网关必须有两条或以上外出顺序流。
  • 基于事件网关后,只能使用intermediateCatchEvent类型。 (activiti不支持基于事件网关后连接ReceiveTask。)
  • 连接到基于事件网关的intermediateCatchEvent只能有一条进入顺序流。

事件网关流程实例

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值