事件篇
事件
(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)与抛出(throwing)*事件。
- 捕获: 当流程执行到达这个事件时,会等待直到触发器动作。触发器的类型由其中的图标,或者说XML中的类型声明而定义。捕获事件与抛出事件显示上的区别,是其内部的图标没有填充(即是白色的)。
- 抛出: 当流程执行到达这个事件时,会触发一个触发器。触发器的类型,由其中的图标,或者说XML中的类型声明而定义。抛出事件与捕获事件显示上的区别,是其内部的图标填充为黑色。
1. 定时器事件
定时触发的相关事件,包括定时器启动事件,定时器捕获中间件事件,定时器边界事件
1.1 定时器启动事件
定时器启动事件(timer start event)在指定时间创建流程实例。在流程只需要启动一次,或者流程需要在特定的时间间隔重复启动时,都可以使用。
*请注意:*子流程不能有定时器启动事件。
*请注意:*定时器启动事件,在流程部署的同时就开始计时。不需要调用startProcessInstanceByXXX就会在时间启动。调用startProcessInstanceByXXX时会在定时启动之外额外启动一个流程。
*请注意:*当部署带有定时器启动事件的流程的更新版本时,上一版本的定时器作业会被移除。这是因为通常并不希望旧版本的流程仍然自动启动新的流程实例。
定时器启动事件,用其中有一个钟表图标的圆圈来表示。我们通过具体案例来介绍
部署流程后等待到具体的时间,我们查看任务即可
时间定义这块使用的是 https://en.wikipedia.org/wiki/ISO_8601#Dates ISO 8601 格式
上面我们是通过指定固定时间来启动的,我们也可以通过duraction
间隔时间来处理。
通过间隔的方式来启动。
timeCycle:指定重复周期,可用于周期性启动流程,或者为超期用户任务多次发送提醒,这个元素可以使用两种格式
- 第一种是按照ISO 8601标准定义的循环时间周期。例如(三次重复间隔,每次间隔为10小时):R3/PT10H
- 也可以使用timeCycle的可选属性endDate,或者像这样直接写在时间表达式的结尾:
R3/PT10H/${EndDate}
。 当到达endDate时,应用会停止,并为该任务创建其他作业 - 也可以通过cron表达式来处理
案例:重复时间设置为 R3PT30S 重复3次,间隔30描述,自动任务绑定的是JavaDelegate
代码语言:javascript复制public class MyJavaDelegate implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) throws Exception {
System.out.println("MyJavaDelegate:执行了。。。" LocalDateTime.now().toString());
}
}
在控制台可以看到对应的效果
也可以指定结束时间
代码语言:javascript复制 <timerEventDefinition>
<timeCycle>R3/PT30S/2022-03-28T21:46:11 00:00</timeCycle>
</timerEventDefinition>
此外还可以通过cron表达式来处理:
代码语言:javascript复制0 0/5 * * * ?
每隔5秒启动
1.2 定时器中间事件
在我们具体的流程处理中,A节点处理完成后,定时触发B节点的处理。
1.3 定时器边界事件
人工任务1如果在定义的2022-09-27T23:36:14
这个时间之前还没有处理,那么就会触发定时边界事件,从而从人工任务3.