Flowable开始事件-定时开始事件

news/2024/11/16 22:53:38/

文章目录

  • 定时开始事件
  • 一、定义
    • 1. 图形标记
    • 2. XML标记
      • 2.1、在指定时间点执行
      • 2.2、指定定时器之前要等待多长时间, timeDuration可以设置为timerEventDefinition的子元素。
      • 2.3、指定重复执行的间隔, 可以用来定期启动流程实例,或为超时时间发送多个提醒。timeCycle元素可以使用两种格式。
      • 2.3.1、第一种是 ISO 8601 标准的格式
      • 2.3.2、cron格式
  • 二、测试用例
    • 2.1 xml文件
    • 2.2 基于springboot的测试用例
  • 总结


定时开始事件


一、定义

定时开始事件用于在指定时间启动一个流程,或者在指定周期内循环启动多次流程,如在2023年8月25号10点发起年度目标审核流程,或每月1号启动财务结算处理流程。当满足设定的时间条件时,定时启动时间就会被触发,从而启动流程。

注意:
1、子流程中不能嵌入定时开始事件
2、 定时开始事件会自动触发流程启动,无需调用API启动流程,如果调用会启动两个流程实例
3、 如果定时开始事件的流程重新部署,新的流程定义会冲刷掉老的流程定义,定时作业也会刷新,再起自动启动流程会启动新的流程定义
4、 如果想使用定时启动事件需要开启作业任务 配置如下:configuration.setAsyncExecutorActivate(true);

注意

1. 图形标记

在这里插入图片描述

2. XML标记

定时开始事件的XML内容是普通开始事件的定义中嵌入一个定时事件。定时开始事件的定义格式如下三种形式:

2.1、在指定时间点执行

如:在2023-08-11T12:13:14执行启动该流程

<startEvent id="start"><timerEventDefinition><timeDate>2023-08-11T12:13:14</timeDate></timerEventDefinition>
</startEvent>

2.2、指定定时器之前要等待多长时间, timeDuration可以设置为timerEventDefinition的子元素。

示例:等待10天执行

<startEvent id="start"><timerEventDefinition><timeDuration>P10D</timeDuration></timerEventDefinition>
</startEvent>

2.3、指定重复执行的间隔, 可以用来定期启动流程实例,或为超时时间发送多个提醒。timeCycle元素可以使用两种格式。

2.3.1、第一种是 ISO 8601 标准的格式

示例:重复3次,每次间隔10小时

<startEvent id="start"><timerEventDefinition><timeCycle>R3/PT10H</timeCycle></timerEventDefinition>
</startEvent>

2.3.2、cron格式

示例:如每月月初启动一个任务

<startEvent id="start" ><timerEventDefinition><timeCycle>0 0 2 1 * ?</timeCycle></timerEventDefinition>
</startEvent>

二、测试用例

2.1 xml文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="TimerStartEventProcess" name="定时开始事件示例流程" isExecutable="true"><!-- 定义定时开始事件 --><startEvent id="start"><timerEventDefinition><timeDuration>PT1M</timeDuration></timerEventDefinition></startEvent><userTask id="task1" name="数据上报"></userTask><endEvent id="end"></endEvent><sequenceFlow id="sequenceFlow1" sourceRef="start" targetRef="task1"></sequenceFlow><sequenceFlow id="sequenceFlow2" sourceRef="task1" targetRef="end"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_TimerStartEventProcess"><bpmndi:BPMNPlane bpmnElement="TimerStartEventProcess" id="BPMNPlane_TimerStartEventProcess"><bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start"><omgdc:Bounds height="31.0" width="31.0" x="100.0" y="150.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="task1" id="BPMNShape_task1"><omgdc:Bounds height="80.0" width="100.0" x="255.0" y="125.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end"><omgdc:Bounds height="28.0" width="28.0" x="480.0" y="151.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sequenceFlow1" id="BPMNEdge_sequenceFlow1"><omgdi:waypoint x="130.99994604632707" y="165.45910304473264"></omgdi:waypoint><omgdi:waypoint x="255.0" y="165.13192612137203"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sequenceFlow2" id="BPMNEdge_sequenceFlow2"><omgdi:waypoint x="355.0" y="165.0"></omgdi:waypoint><omgdi:waypoint x="480.0" y="165.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

2.2 基于springboot的测试用例

@Slf4j
@SpringBootTest(classes = ProdFlowBpmnUiAdminApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class TimeStartEventTest extends AbstractFlowableEngine {@Testpublic void testTimeDuration() throws Exception{ProcessDefinition processDefinition = deployByClasspathResource("startEvent/TimerStartEventProcess.bpmn20.xml");Thread.sleep(1000*90);TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionId(processDefinition.getId());List<Task> list = taskQuery.list();if (CollectionUtils.isNotEmpty(list)) {list.forEach(task -> {log.info("任务名称为:{}", task.getName());});}}
}

总结

定时启动事件,对企业规范化操作是非常有帮助的,通过梳理业务流程,我们能清晰的知道哪些审批流程在什么时间点可以自动触发,大大节约了成本,起到降本增效之目的。


http://www.ppmy.cn/news/247712.html

相关文章

专业做护眼灯的有哪些品牌?盘点专业护眼灯品牌排行

护眼灯是家庭照明必备的工具&#xff0c;专业做护眼灯的却不多&#xff0c;许多家长找不到合适的护眼灯&#xff0c;我就根据标准GB/T 9473-2017《读写作业台灯性能要求》&#xff0c;筛选出五款合适国人使用的护眼灯。 TOP1、南卡护眼台灯Pro 光源舒适度&#xff1a;❤❤❤❤…

第十章:创建和管理表

第十章&#xff1a;创建和管理表 10.1&#xff1a;基础知识 一条数据存储的过程 ​ 存储数据是处理数据的第一步。只有正确地把数据存储起来&#xff0c;我们才能进行有效的处理和分析。否则&#xff0c;只能是一团乱麻&#xff0c;无从下手。 ​ 在MySQL中&#xff0c;一个完…

rust类型转换

类型转换 Rust 是类型安全的语言&#xff0c;因此在 Rust 中做类型转换不是一件简单的事。 as转换 Rust 不提供原生类型之间的隐式类型转换&#xff08;coercion&#xff09;&#xff0c;但可以使用 as 关键字进行显式类型转换&#xff08;casting&#xff09;。例如&#x…

(一)CSharp-Net框架

.NET框架由三部分组成&#xff1a; 1.编程工具。 2.基类库(BCL). 3.公共语言运行库(CLR) CLR 在运行时管理程序的执行&#xff0c;包括以下内容&#xff1a; 内存管理和垃圾收集。代码安全验证。代码执行、线程管理及异常处理。 NET 框架的特点以及其带来的好处&#xff1a…

js字节面试题 读代码题 精讲

这是在牛客上看到的今天一个中国地质大学面试的上海字节的前端题 读代码题 下面这段便是从那里搬过来的 ******** 看代码说答案&#xff0c;关于this指向的&#xff0c;我说错了&#xff0c;甚至我还不知道为什么 看来还需要补补 const length 10 const fn function () …

第四章:运算符

第四章&#xff1a;运算符 4.1&#xff1a;算术运算符 ​ 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达值&#xff0c;对数值或表达式进行加()、减(-)、乘(*)、除(/)、取模(%)运算。 运算符名称作用示例加法运算符计算两个值或表达式的和SE…

神州信息祝贺国盾量子科创板上市!

神州信息祝贺国盾量子科创板上市&#xff01;