1. 引子
其实一直在考虑我要不要再重复写流程引擎建模的部分,毕竟网上,书上,视频上,都已经有很多教程了。不过,想了一想,我是工作流引擎小白啊,我写博客这些的目的是自己的学习记录,为啥不能写。
大部分的bpmn建模讲解,其实都依靠着一个特定的工作流引擎来运行,比如JBPM, activiti, flowable,虽然都是支持BPMN2.0,但就kogito来说,并不全完支持的BPMN2.0建模标记,所以,今天这篇博文内容,多源于官方文档。
2. 事件模型
2.1. 起点事件(Starts)
起点,又称为起点事件(Start Event),就是一个触发的机制。
起点类型 | 主流程 | 子流程 | 说明 |
---|---|---|---|
普通起点 | 不支持 | 一个主流程或子流程最多有且仅有一个普通起点 | |
消息起点 | 一个流程可以有多个消息起点 | ||
计时器起点 | 一个流程可以有多个计时器起点 | ||
信号起点 | 一个流程可以有多个信号起点 |
- 普通起点:官方命名为NoneStart,是一个流程的默认起点,前面几个接触的列子都是这个类型,表现为以Process ID为请求的URL,通过POST传入参数,该流程即触发。正因为是一个流程的默认触发点,所以一个流程或子流程,只能拥有一个该类型的起点。
- 消息起点:官司方命名为MessageStart,通过消息触发该起点,接收到特定的消息(事件发生),即触发该流程起点,流程初始化,开始执行。由于一个消息可能被多个消息起点监听,因此,一个消息事件是可能触发多个起点,并且起动多个流程的。
- 计时器起点:TimerStart,在启动这个流程的时候,会先启动一个计时器,计时器结束时,流程才正式开始执行。
- 信号起点:SignalStart,以一个信号代码触发该标记,监听到该信号时,流程开始执行。
2.2. 中间事件(IntermediateEvent)
- BPMN intermediate events drive the flow of a business process.
- You can add these events between start and end events or as a catch event on the boundary of an activity, such as a subprocess or a user task. You can configure boundary catch events as interrupting or non-interrupting events. An interrupting boundary catch event cancels the bound activity whereas a non-interrupting event does not.
以上内容来自官网,对于中间事件是一个比较好的概括
From official document.
-
重要性:中间事件是驱动流程进程的核心。
-
用法:
- 独立使用
- 附在子流程,或是用户任务上,这有分两种情况
- 中止原流程的执行,中间事件被触发
- 原流程继续执行,中间事件被解发
-
kogito对于中间事件的支持情况。
-
Catching,作为信号的接收方,收到信号即被触发激活
-
Throwing,作为信号生成方,抛出一个信号
2.3. 结束事件(EndEvent)
五种结束类型
- 正常结束
- 结束时,发出消息
- 结束时,抛一个错误
- 中止结束
- 补偿结束
3. 结尾
太晚了,中间线上系统报错去搞了搞,后面就不想写的太仔细了,具体的事件,还是要在流程中使用才可以理解。先这么着吧!