本文节选自《疯狂Workflow讲义(第2版)》
工作流Activiti6电子书:http://blog.youkuaiyun.com/boxiong86/article/details/78488562
工作流Activiti6教学视频:http://blog.youkuaiyun.com/boxiong86/article/details/78608585
事件分类与事件定义
BPMN2.0规定了多种的事件定义,这些事件定义被嵌套到不同的事件中,则可以成为不同类型的事件,这些事件具有不同的特性,并且BPMN2.0规定了这些事件允许出现的位置以及其作用,本小节将对BPMN2.0规范定义的事件进行分类。
按照事件的位置分类
对事件按照位置进行分类,主要可分为开始事件、中间事件和结束事件,其中中间事件可以分为两类:单独作为流程节点的中间事件和依附在某个流程节点的中间事件,本书中所讲的中间事件是指单独作为流程节点的事件,依附在某个流程节点的中间事件,本书将称为边界事件,那么按照位置进行分类,本书将会有以下4种类型的流程事件:
开始事件:表示流程开始的事件。
结束事件:表示流程结束的事件。
中间事件:出现在流程中,单独作为流程节点的事件。
边界事件:附属于某个流程节点(如子流程、流程任务)的事件。
按照事件的特性分类
按照事件的特性进行分类,可以将事件分为Catching事件和Throwing事件,Catching事件会一直等待被触发,而Throwing事件会自动触发并反馈结果,全部的开始事件是Catching事件,因为开始事件总会等待被触发,每种开始事件的触发条件不一样而已,例如定时器开始事件,就需要时间符合条件后触发。全部的结束事件是Throwing事件,结束事件会自动执行并返回结果。全部的边界事件是Catching事件,因为这些边界事件总会符合某些特定条件才会触发。部分的中间事件为Catching事件(如Signal Intermediate Catching Event),部分的中间事件为Throwing事件(如Signal Intermediate Throwing Event)。
事件定义概述
事件主要用于体现Catching事件的触发和Throwing事件的结果,BPMN2.0规范中规定了多种事件定义:CancelEventDefinition、CompensationEventDefinition、ConditionalEventDefinition、ErrorEventDefinition、EscalationEventDefinition、MessageEventDefinition、LinkEventDefinition、SignalEventDefinition、TerminateEventDefinition和TimerEventDefinition。除此之外,还包括无指定事件和复合事件,无指定事件是指在一个事件中没有指定任何事件定义,复合事件是指在一个事件中包含多个事件定义。每个事件定义可以按照规定与事件(开始事件、结束事件和中间事件)结合,成为特定的事件。例如将TimerEventDefinition与开始事件结合,成为定时器开始事件。
定时器事件定义
定时器事件是一个由定时器触发的事件,定时器事件的定义可以嵌套在开始事件、中间事件或者边界事件中。在流程文件中使用timerEventDefinition元素表示一个定时器事件定义,假设在一个开始事件中定义一个定时器事件定义,配置如下:
<startEvent id="timerstartevent1" name="Timer start">
<timerEventDefinition></timerEventDefinition>
</startEvent>
只定义一个timerEventDefinition元素是不足以描述该定时器事件,需要往timerEventDefinition元素下加入子元素,timerEventDefinition下允许定义的子元素有以下3个:
timeDate:指定一个定时器触发的时间。
timeDuration:指定定时器激活后多久的时间内该定时器被运行。假设定时器在当前时刻激活,设置该值为PT5M,即会在5分钟后执行。
timeCycle:指定定时器的重复间隔,该元素常应用于一些定时任务的执行,包括流程的定时启动、任务提醒等。
以上3个timerEventDefinition的子元素,在定义时间时,都需要遵守ISO 8601的国际标准,该标准是日期和时间的表示方法,其中timeCycle还支持使用cron表达式来设定定时器的重复间隔。代码清单11-1为timerEventDefinition的三个子元素的配置示例。
代码清单11-1:
codes\11\11.1\event-definition\resource\bpmn\timer\TimerDefine1.bpmn,
codes\11\11.1\event-definition\resource\bpmn\timer\TimerDefine2.bpmn,
codes\11\11.1\event-definition\resource\bpmn\timer\TimerDefine3.bpmn