Camunda工作流网关(二)-Parallel Gateway(并行网关)


在Camunda的 Modeler工具中提供了5种类型的网关:

  1. Exclusive Gateway(独占网关或排他网关)
  2. Parallel Gateway(并行网关)
  3. Inclusive Gateway(包容性网关)
  4. Complex Gateway(复杂网关)
  5. Event-based Gateway(基于事件的网关)

每一个网关都有自己独特的功能,本章主要介绍Parallel Gateway(并行网关)的使用方式。

1、Parallel Gateway(并行网关)

在这里插入图片描述

A parallel gateway (or AND-gateway) allows you to split the flow into concurrent paths.
并行网关(或AND网关)允许您将流拆分为并发路径。

When a parallel gateway with multiple outgoing sequence flows is entered, all flows are taken. The paths are executed concurrently and independently.
当输入具有多个传出序列流的并行网关时,将获取所有流。这些路径是同时独立执行的。

The concurrent paths can be joined using a parallel gateway with multiple incoming sequence flows. The process instance waits at the parallel gateway until each incoming sequence is taken.
可以使用具有多个传入序列流的并行网关来连接并发路径。进程实例在并行网关处等待,直到获取每个传入序列为止。

并行网关的重要特性

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

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

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

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

(4)并行网关不会解析条件,即使顺序流中定义了条件,也会被忽略,所以不用在连线上添加流程变量判断流程流向。

重点:
并行网关至少有一条分支被执行,而且所有的分支都会被执行。
并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

2、业务场景

公司里有个用章的流程,先是部门主任审批,然后下一步就需要项目经理审批,后勤行政主管审批,综合办审批,这三个节点不需要判断,都需要执行 。

在这里插入图片描述

并行网关和其他网关不一样,右侧不能设置Condition条件,也就是说并行网关不需要条件,所有的节点都需要触发。

在这里插入图片描述

部门主任审批完成后,流程图显示三个节点需要处理,如下图:
在这里插入图片描述

部门主任审批完成后,act_ru_task任务表生成三条记录
在这里插入图片描述
act_hi_taskinst 历史任务表生成三条记录
在这里插入图片描述

3、BPMN流程模型文件

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_14x7iqb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.12.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
  <bpmn:process id="flow_xmgs_tylc03" name="通用流程03" isExecutable="true" camunda:historyTimeToLive="100">
    <bpmn:userTask id="Activity_1jfshj8" name="综合办审批" camunda:assignee="${bmzrapprover}">
      <bpmn:incoming>Flow_0n13tl5</bpmn:incoming>
      <bpmn:outgoing>Flow_1hom98o</bpmn:outgoing>
      <bpmn:multiInstanceLoopCharacteristics camunda:collection="zhbList" camunda:elementVariable="bmzrapprover">
        <bpmn:completionCondition xsi:type="bpmn:tFormalExpression">${nrOfCompletedInstances ==1}</bpmn:completionCondition>
      </bpmn:multiInstanceLoopCharacteristics>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_1eadekv" name="后勤行政主管" camunda:assignee="${hqxzzgapprover}">
      <bpmn:incoming>Flow_1w2mccm</bpmn:incoming>
      <bpmn:outgoing>Flow_0vhd0x0</bpmn:outgoing>
      <bpmn:multiInstanceLoopCharacteristics camunda:collection="hqxzzgList" camunda:elementVariable="hqxzzgapprover" />
    </bpmn:userTask>
    <bpmn:userTask id="Activity_0dp5aff" name="项目经理审批" camunda:assignee="${xmjlapprover}">
      <bpmn:incoming>Flow_1mu2q0o</bpmn:incoming>
      <bpmn:outgoing>Flow_1idtuv5</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_0yme7cw" name="业务审批" camunda:assignee="${hrapprover}">
      <bpmn:incoming>Flow_19k7a5z</bpmn:incoming>
      <bpmn:outgoing>Flow_1ttjdm2</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1idtuv5" sourceRef="Activity_0dp5aff" targetRef="Gateway_1bwkty8" />
    <bpmn:sequenceFlow id="Flow_1hom98o" sourceRef="Activity_1jfshj8" targetRef="Gateway_1bwkty8" />
    <bpmn:sequenceFlow id="Flow_0vhd0x0" sourceRef="Activity_1eadekv" targetRef="Gateway_1bwkty8" />
    <bpmn:sequenceFlow id="Flow_19k7a5z" sourceRef="Gateway_1bwkty8" targetRef="Activity_0yme7cw" />
    <bpmn:sequenceFlow id="Flow_1mu2q0o" sourceRef="Gateway_0qq9km9" targetRef="Activity_0dp5aff" />
    <bpmn:sequenceFlow id="Flow_0n13tl5" sourceRef="Gateway_0qq9km9" targetRef="Activity_1jfshj8" />
    <bpmn:sequenceFlow id="Flow_1w2mccm" sourceRef="Gateway_0qq9km9" targetRef="Activity_1eadekv" />
    <bpmn:sequenceFlow id="Flow_119uv3d" sourceRef="Activity_0av5lza" targetRef="Gateway_0qq9km9" />
    <bpmn:parallelGateway id="Gateway_0qq9km9" name="并行网关">
      <bpmn:incoming>Flow_119uv3d</bpmn:incoming>
      <bpmn:outgoing>Flow_1mu2q0o</bpmn:outgoing>
      <bpmn:outgoing>Flow_0n13tl5</bpmn:outgoing>
      <bpmn:outgoing>Flow_1w2mccm</bpmn:outgoing>
    </bpmn:parallelGateway>
    <bpmn:endEvent id="Event_1bhd1o0" name="结束">
      <bpmn:incoming>Flow_1ttjdm2</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_1ttjdm2" sourceRef="Activity_0yme7cw" targetRef="Event_1bhd1o0" />
    <bpmn:parallelGateway id="Gateway_1bwkty8">
      <bpmn:incoming>Flow_1idtuv5</bpmn:incoming>
      <bpmn:incoming>Flow_1hom98o</bpmn:incoming>
      <bpmn:incoming>Flow_0vhd0x0</bpmn:incoming>
      <bpmn:outgoing>Flow_19k7a5z</bpmn:outgoing>
    </bpmn:parallelGateway>
    <bpmn:startEvent id="Event_1bb4pen">
      <bpmn:outgoing>Flow_03959vw</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_03959vw" sourceRef="Event_1bb4pen" targetRef="Activity_0av5lza" />
    <bpmn:userTask id="Activity_0av5lza" name="部门主任审批">
      <bpmn:incoming>Flow_03959vw</bpmn:incoming>
      <bpmn:outgoing>Flow_119uv3d</bpmn:outgoing>
    </bpmn:userTask>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="flow_xmgs_tylc03">
      <bpmndi:BPMNShape id="BPMNShape_05ou9jz" bpmnElement="Activity_1jfshj8">
        <dc:Bounds x="560" y="360" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_1hk6vkq" bpmnElement="Activity_1eadekv">
        <dc:Bounds x="560" y="220" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_1lurxsj" bpmnElement="Activity_0dp5aff">
        <dc:Bounds x="560" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_1ptb9ma" bpmnElement="Activity_0yme7cw">
        <dc:Bounds x="840" y="220" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_03cntg7_di" bpmnElement="Gateway_0qq9km9">
        <dc:Bounds x="445" y="235" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="448" y="213" width="44" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1bhd1o0_di" bpmnElement="Event_1bhd1o0">
        <dc:Bounds x="1012" y="242" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1019" y="285" width="22" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_0rf8ahu_di" bpmnElement="Gateway_1bwkty8">
        <dc:Bounds x="725" y="235" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1bb4pen_di" bpmnElement="Event_1bb4pen">
        <dc:Bounds x="152" y="242" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0bbu7rf_di" bpmnElement="Activity_0av5lza">
        <dc:Bounds x="260" y="220" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_0f9qh5w" bpmnElement="Flow_1idtuv5">
        <di:waypoint x="660" y="120" />
        <di:waypoint x="750" y="120" />
        <di:waypoint x="750" y="235" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_0h10sev" bpmnElement="Flow_1hom98o">
        <di:waypoint x="660" y="400" />
        <di:waypoint x="750" y="400" />
        <di:waypoint x="750" y="285" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_0lyykuf" bpmnElement="Flow_0vhd0x0">
        <di:waypoint x="660" y="260" />
        <di:waypoint x="725" y="260" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_126jysm" bpmnElement="Flow_19k7a5z">
        <di:waypoint x="775" y="260" />
        <di:waypoint x="840" y="260" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_14pbmj0" bpmnElement="Flow_1mu2q0o">
        <di:waypoint x="470" y="235" />
        <di:waypoint x="470" y="120" />
        <di:waypoint x="560" y="120" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1005" y="175" width="23" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_0c8q6v9" bpmnElement="Flow_0n13tl5">
        <di:waypoint x="470" y="285" />
        <di:waypoint x="470" y="400" />
        <di:waypoint x="560" y="400" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1005" y="340" width="23" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_1qq53dk" bpmnElement="Flow_1w2mccm">
        <di:waypoint x="495" y="260" />
        <di:waypoint x="560" y="260" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1049" y="243" width="23" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_119uv3d_di" bpmnElement="Flow_119uv3d">
        <di:waypoint x="360" y="260" />
        <di:waypoint x="445" y="260" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1ttjdm2_di" bpmnElement="Flow_1ttjdm2">
        <di:waypoint x="940" y="260" />
        <di:waypoint x="1012" y="260" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_03959vw_di" bpmnElement="Flow_03959vw">
        <di:waypoint x="188" y="260" />
        <di:waypoint x="260" y="260" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hardworkl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值