本文节选自《疯狂工作流讲义(第2版)》
京东购买地址:https://item.jd.com/12246565.html
工作流Activiti6电子书:http://blog.youkuaiyun.com/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.youkuaiyun.com/boxiong86/article/details/78608585
中间事件
本书所称的中间事件是指可以单独作为流程元素的事件,BPMN2.0规范中所指的中间事件也包括边界事件。中间事件作为流程元素表示对事件的捕获与事件的触发,一类中间事件可以在流程中等待被触发,一类中间事件会在流程中自动被触发并抛出结果(触发信息)。
中间事件分类
中间事件按照其特性可以分为两类:中间Catching事件和中间Throwing事件,当流程到达中间Catching事件时,它会一直在等待被触发,直接接收到的信息,才会被触发,而当流程到达中间Throwing事件时,该事件会自动被触发并抛出相应的结果或者信息。
BPMN2.0中定义的中间Catching事件有:消息(Message)中间事件、定时器(Timer)中间事件、条件(Conditional)中间事件、连接(Link)中间事件、信号(Signal)中间事件、组合(Multiple)中间事件和并行(Parallel Multiple)中间事件。
BPMN2.0中定义的中间Throwing事件有:无指定(None)中间事件、消息(Message)中间事件、升级(Escalation)中间事件、补偿(Compensation)中间事件、连接(Link)中间事件、信号(Signal)中间事件和组合(Multiple)中间事件。
Activiti支持的中间Catching事件有定时器(Timer)中间事件、信号(Signal)中间事件和消息(Message)中间事件,支持的中间Throwing事件有无指定(None)中间事件、信号(Signal)中间事件和补偿(Compensation)中间事件。除了无指定Throwing中间事件外,其他事件均需要加入事件定义。使用intermediateCatchEvent元素定义一个中间Catching事件,如以下配置片断:
<intermediateCatchEvent id="myIntermediateCatchEvent" >
<XXXEventDefinition/>
</intermediateCatchEvent>
使用intermediateThrowEvent元素定义一个中间Throwing事件,如以下配置片断:
<intermediateThrowEvent id="myIntermediateThrowEvent" >
<XXXEventDefinition/>
</intermediateThrowEvent>
定时器中间事件
定时器中间事件是一个Catching事件,该事件会一直等待被触发,当达到定义的时间条件后,该定时器中间事件会被触发,流程继续往下执行。假设现在有一个接收订单的业务,当接收到订单后,需要给一定的时间让相关的业务部门(例如仓库、物流或者生产)准备,然后进行发货,此时可以加入定时器中间事件定义流程自动向下执行的时间间隔,图11-13表示该业务流程,代码清单11-31为该流程对应的文件内容。
图11-13 含有定时器中间事件的流程
代码清单11-31:codes\11\11.6\intermediate-event\resource\bpmn\TimerCatchingEvent.bpmn
<process id="tcProcess" name="tcProcess">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="发货"></userTask>
<userTask id="usertask2" name="接收订单"></userTask>
<intermediateCatchEvent id="timerintermediatecatchevent1"
name="TimerCatchEvent">
<timerEventDefinition>
<timeDuration>PT1M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" name="" sourceRef="startevent1"
targetRef="usertask2"></sequenceFlow>
<sequenceFlow id="flow2" name="" sourceRef="usertask2"
targetRef="timerintermediatecatchevent1"></sequenceFlow>
<sequenceFlow id="flow3" name=""
sourceRef="timerintermediatecatchevent1" targetRef="usertask1"></sequenceFlow>
<sequenceFlow id="flow4" name="" sourceRef="usertask1"
targetRef="endevent1"></sequenceFlow>
</process>
代码清单11-31的粗体字代码,定义了一个定时器中间事件,使用了timeDuration元素,当流程到达该流程活动1分钟之后

本文详细介绍了BPMN2.0中的中间事件,包括中间Catching事件(定时器、信号、消息事件)和中间Throwing事件(无指定、信号、补偿事件)。通过实例展示了Activiti6对这些事件的支持,如定时器事件在订单处理流程中的应用和信号事件在用户购买商品流程中的作用。同时提到了消息事件和无指定事件的使用场景。
最低0.47元/天 解锁文章
8178

被折叠的 条评论
为什么被折叠?



