目录

  • 定义
  • 图形标记
  • XML内容
  • 界面操作
  • 使用示例
  • 视频教程
  • 演示demo


定义

错误结束事件会在流程到达错误结束事件的时候抛出错误,并结束当前的流程分支。异常结束
事件是有抛出结果的,它需要定义抛出错误码,如果找到了异常开始事件错误码,就会触发异常开
始事件。
错误结束事件只适用于子流程结束抛出错误事件,由父流程的错误边界事件捕获。

图形标记

错误结束事件是一个标准的结束事件(粗边圆圈),内部有错误图标。错误图标是全黑的,表
示触发语法,如图所示

Flowable-结束事件-错误结束事件_bpmnjs

XML内容

错误结束事件,表示为结束事件,加上 errorEventDefinition 子元素,errorRef 属性可以引用在
流程外定义的 error 元素:

<error id="theError" />
 <process id="errorEndEventProcess">
     <endEvent id="myErrorEndEvent">
     <errorEventDefinition errorRef="theError" />
     </endEvent>
 </process>

在以上 xml 代码片段中,首先定义了一个 id 属性值为 theError 的错误,然后在结束事件中使
用 errorEventDefinition 元素引用该 error,从而构成了一个错误结束事件。

界面操作

Flowable-结束事件-错误结束事件_java_02

使用示例

错误结束事件一般和错误边界事件(Intermediate Boundary Error Event)搭配一起使用,错误
结束事件触发错误边界事件,错误边界事件捕获错误结束事件抛出的错误信息,通常在嵌套子流程
和调用子流程中使用。如果找不到匹配的错误边界事件,将会抛出异常。
用户启动流程,下单之后进入付款子流程,如果付款成功,子流程到达空结束事件从而子流程
结束,进入后续的发货节点;如果付款失败,到达错误结束事件,抛出错误并结束子流程,子流程
上的错误边界事件捕获到错误信息,重新启动付款子流程。对应的流程图如图所示:

Flowable-结束事件-错误结束事件_java_03

<error id="payError" errorCode="payErrorCode" />
  <process id="ErrorEndEventProcess" name="错误结束事件" isExecutable="true">
    <userTask id="a9485eda61d534bd5a6bf059c359637cf" name="下单">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="aaeb88fef071f4fa88aea70b5ce4cefd5" sourceRef="ac0a8178a92164c37b8be22cc6023b8aa" targetRef="a9485eda61d534bd5a6bf059c359637cf" />
    <sequenceFlow id="Flow_01p5dv8" sourceRef="a9485eda61d534bd5a6bf059c359637cf" targetRef="Activity_0vse4d1" />
    <subProcess id="Activity_0vse4d1" name="付款子流程">
      <extensionElements>
        <flowable:assigneeType>static</flowable:assigneeType>
        <flowable:formData />
      </extensionElements>
      <startEvent id="Event_1u7pw9m">
        <extensionElements>
          <flowable:formData />
        </extensionElements>
      </startEvent>
      <userTask id="Activity_08d9gg7" name="付款">
        <extensionElements>
          <flowable:assigneeType>static</flowable:assigneeType>
          <flowable:formData />
        </extensionElements>
      </userTask>
      <sequenceFlow id="Flow_07eodwu" sourceRef="Event_1u7pw9m" targetRef="Activity_08d9gg7" />
      <exclusiveGateway id="Gateway_1e8ts1f" />
      <sequenceFlow id="Flow_0bzye5t" sourceRef="Activity_08d9gg7" targetRef="Gateway_1e8ts1f" />
      <endEvent id="Event_1v4gxpv" />
      <sequenceFlow id="Flow_0on37gt" name="支付成功" sourceRef="Gateway_1e8ts1f" targetRef="Event_1v4gxpv">
        <conditionExpression xsi:type="tFormalExpression">${payResult == true}</conditionExpression>
      </sequenceFlow>
      <sequenceFlow id="Flow_0dqc8u3" name="支付失败" sourceRef="Gateway_1e8ts1f" targetRef="Event_1w3dv09">
        <conditionExpression xsi:type="tFormalExpression">${payResult == false}</conditionExpression>
      </sequenceFlow>
      <endEvent id="Event_1w3dv09">
        <errorEventDefinition errorRef="payError" flowable:errorVariableLocalScope="false" flowable:errorVariableTransient="false" />
      </endEvent>
    </subProcess>
    <userTask id="Activity_062xb68" name="发货">
      <extensionElements>
        <flowable:assigneeType>static</flowable:assigneeType>
        <flowable:formData />
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_0spxrt9" sourceRef="Activity_0vse4d1" targetRef="Activity_062xb68" />
    <userTask id="Activity_067yadn" name="收货" />
    <sequenceFlow id="Flow_0y2xpmk" sourceRef="Activity_062xb68" targetRef="Activity_067yadn" />
    <endEvent id="Event_0b3nzse" />
    <sequenceFlow id="Flow_1aiwj8e" sourceRef="Activity_067yadn" targetRef="Event_0b3nzse" />
    <boundaryEvent id="Event_00bbo9x" attachedToRef="Activity_0vse4d1">
      <errorEventDefinition errorRef="payError" flowable:errorVariableLocalScope="false" flowable:errorVariableTransient="false" />
    </boundaryEvent>
    <sequenceFlow id="Flow_14f59h2" name="重新付款" sourceRef="Event_00bbo9x" targetRef="Activity_0vse4d1" />
    <startEvent id="ac0a8178a92164c37b8be22cc6023b8aa">
      <extensionElements>
        <flowable:formData />
      </extensionElements>
    </startEvent>
  </process>

视频教程

错误结束事件

演示demo

错误结束事件

本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。