疯狂Activiti6.0连载(25)BPMN结束事件

本文详细介绍了Activiti6中不同类型的BPMN结束事件,包括无指定结束事件、错误结束事件、取消结束事件和终止结束事件。通过具体的代码示例和流程图解释了它们在流程执行中的作用和触发机制,特别是错误结束事件在子流程中的应用,以及取消结束事件如何触发补偿机制。此外,还讨论了终止结束事件如何终结整个流程实例的执行流。
摘要由CSDN通过智能技术生成

 本文节选自《疯狂工作流讲义(第2版)》

京东购买地址:https://item.jd.com/12246565.html

工作流Activiti6电子书http://blog.csdn.net/boxiong86/article/details/78488562

工作流Activiti6教学视频http://blog.csdn.net/boxiong86/article/details/78608585

 

BPMN结束事件

结束事件表示流程的结束,因此结束事件并不允许有输出的顺序流,BPMN2.0规定没有顺序流可以从结束事件中输出。根据前面的章节所述,结束事件总是抛出事件,这些事件会自动执行并反馈结果,并不需要触发。BPMN2.0中定义了多种结束事件,包括:无指定None结束事件、消息(Message)结束事件、升级(Escalation)结束事件、错误(Error)取消事件、取消Cancel结束事件、补偿Compensation结束事件、信号Signal结束事件、终止Terminate结束事件和组合Multiple结束事件,目前Activiti支持无指定结束事件、错误结束事件取消结束事件和终止结束事件

无指定结束事件

与无指定开始事件一样,无指定结束事件,是指流程在结束时,不会进行任何的额外操作,结束事件中不使用任何事件的定义。11-5为结束事件的图形。


11-5 结束事件的图形

在流程描述文件中,使用endEvent元素定义一件结束事件,代码清单11-14为一个简单的流程配置内容,该段配置的粗体字代码,定义了一个无指定结束事件。

代码清单11-14codes\11\11.4\end-event\resource\bpmn\NoneEndEvent.bpmn

    <process id="myProcess" name="myProcess">

        <startEvent id="startevent1" name="Start"></startEvent>

        <userTask id="usertask1" name="User Task"></userTask>

        <endEvent id="endevent1" name="End"></endEvent>

        <sequenceFlow id="flow1" name="" sourceRef="startevent1"

            targetRef="usertask1"></sequenceFlow>

        <sequenceFlow id="flow2" name="" sourceRef="usertask1"

            targetRef="endevent1"></sequenceFlow>

    </process>

错误结束事件

当执行流到达错误结束事件时,会结束该执行流并且抛出错误,该错误可以被错误边界事件捕获,如果没有定义任何的错误边界事件,那么将会被当作无指定错误事件执行,因此,错误结束事件一般使用在子流程当中错误事件结束,就会触发依附在该子流程上的错误边界事件。11-6定义了一个含有错误结束事件和错误边界事件的流程。


11-6 含有错误结束事件和错误边界事件的流程

如图11-6所示,该流程一启动,就会进入一个嵌套子流程,当完成了“Sub Task”的用户任务后,会遇到单向网关,此时会产生两个分支,一个分支会正常结束该子流程,另外一个分支会触发错误结束事件,如果正常结束该子流程,流程会到达“End Task”任务,而触发错误结束事件后,流程会到达“Error Task”任务。该流程图对应的流程文件如代码清单11-15所示。

代码清单11-15codes\11\11.4\end-event\resource\bpmn\ErrorEndEvent.bpmn

    <error id="myError" errorCode="myError"></error>   

    <process id="errorEndProcess" name="errorEndProcess">

        <startEvent id="startevent1" name="Start"></startEvent>

        <subProcess id="subprocess1" name="Sub Process">

            <startEvent id="startevent2" name="Start"></startEvent>

            <userTask id="usertask1" name="Sub Task"></userTask>

            <endEvent id="endevent1" name="ErrorEnd">

                <errorEventDefinition errorRef="myError"></errorEventDefinition>

            </endEvent>

            <sequenceFlow id="flow2" name="" sourceRef="startevent2"

                targetRef="usertask1"></sequenceFlow>

            <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>

            <endEvent id="endevent3" name="End"></endEvent>

            <sequenceFlow id="flow7" name="" sourceRef="usertask1"

                targetRef="exclusivegateway1"></sequenceFlow>

            <sequenceFlow id="flow8" name="" sourceRef="exclusivegateway1"

                targetRef="endevent3">

                <conditionExpression xsi:type="tFormalExpression">${success == true}

                </conditionExpression>

            </sequenceFlow>

            <sequenceFlow id="flow9" name="" sourceRef="exclusivegateway1"

                targetRef="endevent1">

                <conditionExpression xsi:type="tFormalExpression">${success ==

                    false}</conditionExpression>

            </sequenceFlow>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨大仙的程序空间

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

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

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

打赏作者

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

抵扣说明:

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

余额充值