Flowable-网关-排他网关

目录

      • 定义
      • 图形标记
      • XML内容
      • 示例
      • 视频教程

定义

排他网关,也叫异或(XOR)网关,是 BPMN 中使用的最常见的网关之一,用来在流转中实
现发散分支决策。排他网关需要和条件顺序流搭配使用,当流程执行到排他网关,所有流出的顺序
流都会被按顺序求解计算一遍,其中第一个条件解析为 true 的顺序流会被选中(当多个顺序流程的
条件为 true 时,只有第一个会被选中)并且不再计算其它流出分支,让流程沿着第一条被选中的执
行线运行;如果所有顺序流条件计算结果都为 false 且该网关定义了一个默认顺序流,那么该默认
顺序流将被执行;如果所有顺序流条件计算结果都为 false 且没有定义默认顺序流,则抛出异常,
中断执行,在流程设计时应该避免这种情况的发生,至少需要确保有一条分支的顺序流计算结果为true。
排他网关的流程分支的顺序流建议配置条件,未设置条件的顺序流被计算为 true。
排他网关没有合并的效果,只要有一个流入的顺序流到达,该网关流出的顺序流被激活开始执
行计算。如果前置可能会有多个正在执行的分支,排他网关之后的路径将在每个分支到达时被重复
实例化(除非业务需求的确如此,否则应避免这种情况的发生)。

图形标记

排他网关用内部带有“X”图标的标准网关(菱形)表示,“X”图标表示异或(XOR)语义。
排他网关的图形标志如图所示。

Flowable-网关-排他网关_第1张图片

XML内容

排他网关用一行定义了网关,条件表达式定义在流出顺序流中:

<exclusiveGateway id="Gateway_1gse3sj" default="Flow_1gdshzv"/>

示例

Flowable-网关-排他网关_第2张图片

 <process id="ServiceSpringCloudBackServiceProcess" name="服务-Springcloud回调服务" isExecutable="true">
    <startEvent id="a39b8c7712bb742a7aa081cf731563c96" />
    <userTask id="ad7ca5657f18f4e64aa6e309db12fc47b" name="费用申请">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>staticflowable:assigneeType>
      extensionElements>
      <outgoing>Flow_0tmo406outgoing>
    userTask>
    <sequenceFlow id="a653af6d1d2774d02afc0301d2f0121e2" sourceRef="a39b8c7712bb742a7aa081cf731563c96" targetRef="ad7ca5657f18f4e64aa6e309db12fc47b" />
    <endEvent id="Event_1vogsar">
      <incoming>Flow_0odeyuqincoming>
    endEvent>
    <exclusiveGateway id="Gateway_1gse3sj" default="Flow_1gdshzv">
      <incoming>Flow_0tmo406incoming>
      <outgoing>Flow_1gdshzvoutgoing>
      <outgoing>Flow_0mdfhgfoutgoing>
    exclusiveGateway>
    <userTask id="Activity_0b7092y" name="经理">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>staticflowable:assigneeType>
      extensionElements>
      <incoming>Flow_1gdshzvincoming>
      <outgoing>Flow_0c58ztvoutgoing>
    userTask>
    <userTask id="Activity_1gvbrzi" name="总监">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>staticflowable:assigneeType>
      extensionElements>
      <incoming>Flow_0c58ztvincoming>
      <incoming>Flow_0mdfhgfincoming>
      <outgoing>Flow_0ovnf34outgoing>
    userTask>
    <sequenceFlow id="Flow_0c58ztv" sourceRef="Activity_0b7092y" targetRef="Activity_1gvbrzi" />
    <userTask id="Activity_0ol5zjn" name="总经理">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>staticflowable:assigneeType>
      extensionElements>
      <incoming>Flow_0ovnf34incoming>
      <outgoing>Flow_0odeyuqoutgoing>
    userTask>
    <sequenceFlow id="Flow_0ovnf34" sourceRef="Activity_1gvbrzi" targetRef="Activity_0ol5zjn" />
    <sequenceFlow id="Flow_0odeyuq" sourceRef="Activity_0ol5zjn" targetRef="Event_1vogsar" />
    <sequenceFlow id="Flow_0tmo406" sourceRef="ad7ca5657f18f4e64aa6e309db12fc47b" targetRef="Gateway_1gse3sj" />
    <sequenceFlow id="Flow_1gdshzv" sourceRef="Gateway_1gse3sj" targetRef="Activity_0b7092y" />
    <sequenceFlow id="Flow_0mdfhgf" name="大于10000" sourceRef="Gateway_1gse3sj" targetRef="Activity_1gvbrzi">
      <conditionExpression xsi:type="tFormalExpression">${money>10000}conditionExpression>
    sequenceFlow>
  process>

在以上代码中,加粗代码定义了排他网关 Gateway_1gse3sj,它流出的条件顺序流有
Flow_1gdshzv、Flow_0mdfhgf,分别定义了条件 默认流、Flow_0mdfhgf。

视频教程

排他网关

你可能感兴趣的:(Flowable组件库,数据库,网络,服务器,工作流引擎,flowable,bpmnjs)