一、BPMN2.0
BPMN2.0规范是一个标准,开源框架和不同供应商都遵循这份标准,使得最终用户不会因为依赖专有解决方案,而被供应商“绑架”。有了BPMN2.0标准,不同解决方案之间的迁移,变得十分简单平滑。
缺点则是标准通常是不同观点大量讨论与妥协的结果,有些结构或方法会十分笨重。Flowable在实现规范的基础上进行了功能和使用性扩展。
- 自定义扩展是在标准方式的基础上进行简化。因此当你决定使用自定义扩展时,仍然可以用标准方式。
- 使用自定义扩展时,总是通过**flowable:**命名空间前缀,明确标识出XML元素、属性等。
- Flowable引擎也支持**activiti:**命名空间前缀。
注:在官方文档中,启动和结束事件已有较详细的介绍,是英文版。启动和结束事件是流程里重要的内容,现在做个汇总整理。
二、启动事件
启动事件(start event)是流程的起点。
- 启动事件在XML中,类型由子元素声明来定义。
- 启动事件保持等候状态,直到特定的触发器被触发。
- 启动事件是细线图形。
2.1 空启动事件
2.1.1 描述
空启动事件(none Start Event),指的是未指定触发器,由用户调用的启动事件。
2.1.2 图示
空启动事件用空心圆圈表示,中间没有图标(也就是说,没有触发器)。
2.1.3 XML表示
空启动事件的XML表示格式,就是普通的启动事件声明,而没有任何子元素(其他种类的启动事件都有用于声明其类型的子元素)。
<startEvent id="start" name="my start event" />
2.1.4 使用方法:
ProcessInstance processInstance = runtimeService.startProcessInstanceByXXX();
2.1.5 自定义扩展
formKey: 引用表单定义,用户需要在启动时填写的表单。(目前只需了解到启动事件可以绑定表单即可,详细内容在表单章节中讲解。)
<startEvent id="request" flowable:formKey="simpleForm" />
2.2 定时器启动事件
2.2.1 描述
定时器启动事件(timer start event)在指定时间内创建一次或多次的流程实例。
-
定时器启动事件,在流程部署的同时就开始计时。不需要调用startProcessInstanceByXXX就会在时间启动。调用startProcessInstanceByXXX时会在定时启动之外额外启动一个流程。
-
当部署带有定时器启动事件的流程的更新版本时,上一版本的定时器作业会被移除。这是因为通常并不希望旧版本的流程仍然自动启动新的流程实例。
2.2.2 图示
定时器启动事件,用其中有一个钟表图标的圆圈来表示。
2.2.3 XML表示
定时器启动事件的XML表示格式,是普通的启动事件声明加上定时器定义子元素。
定时器定义必须且只能包含下列的一种元素:
- timeDate。这个元素指定了ISO 8601格式的固定时间。在这个时间就会触发触发器。例如:
<timerEventDefinition>
<timeDate>2022-01-11T12:13:14</timeDate>
</timerEventDefinition>
- timeDuration。要定义定时器需要等待多长时间再触发,同样使用ISO 8601格式(BPMN 2.0规范要求)。例如(等待10天):
<timerEventDefinition>
<timeDuration>P10D</timeDuration>
</timerEventDefinition>
-
timeCycle。指定重复周期,可用于周期性启动流程。例如(重复三次启动,每次间隔为10小时,到指定时间时结束重复):
<timerEventDefinition> <timeCycle>R3/PT10H/2022-01-12T23:59:59+00:00</timeCycle