深入探究Camunda监听器

简介: 执行监听器与任务监听器

前言

本篇不仅仅是讲解监听器功能,也是对上一篇深入探究Camunda加签问题使用执行监听器加签时为什么要在连线上设置的解答。

首先监听器分为ExecutionListener【执行监听器】和TaskListener【任务监听器】,我们知道不管是连线还是任务节点底层都有对应的执行器,所以ExecutionListener是可以设置在连线和节点上的。

接着我们说一下哪些场景下可以使用监听器去完成:

  • 动态分配节点处理人
  • 流程运行到某个节点时通知待办人
  • 统计任务处理时间
  • 处理业务逻辑

执行监听器

执行监听器的触发事件有:start、end、take;其中节点有start、end两种事件,而连线则有take事件。

给或签节点设置了开始事件和结束事件的执行监听器

开启一条流程实例测试一下,这里我们在发起流程时就把所有节点审批人参数设置好。

发起人节点调用审批通过后就触发或签节点的执行监听器开始事件,两次是因为该监听事件是设置在节点上的,而或签节点设置了两个处理人,所以它会创建两个待办任务,每个待办任务都有对应的执行器,等到或签节点有人审批通过了,就会触发执行监听器结束事件。

接下来我们改变一下设置审批人的方式,通过任务节点上的执行监听器去设置,【其实这里不需要测试的,想想就知道不行,为了能表达地更清晰吧】

@ComponentpublicclassCustomExecutionListenerimplementsExecutionListener {
@Overridepublicvoidnotify(DelegateExecutiondelegateExecution) throwsException {
System.out.println("ExecutionListener--事件:【"+delegateExecution.getEventName()+"】--触发了");
if ("start".equals(delegateExecution.getEventName())){
List<String>userOneList=newArrayList<>();
userOneList.add("zhangsan");
userOneList.add("lisi");
delegateExecution.setVariable("userOneList",userOneList);
        }
    }
}

当发起人节点审批后,会报错

说明在触发该监听器之前,流程引擎就需要知道该节点上有几个待办任务从而创建对应数量的执行器。这也是上一篇动态设置审批人时在节点前连线上设置执行监听器的原因。

当前你可以选择在节点上的执行监听器结束事件触发时去设置下一节点审批人,不过我感觉麻烦一点。

任务监听器

任务监听器的触发事件有:create, assignment, update, complete, delete or timeout。

这里我们演示常用的create、assignment、complete事件

重新部署后,把审批人设置方式再改回到发起流程时设置,然后发起流程实例,这里如果执行监听器的触发在任务监听器之前,那就更不能在任务监听器上动态设置审批人了。

先看红框标记部分,当任务监听器的完成事件触发后才会触发节点上执行监听器的结束事件,然后触发下一个节点的执行监听器开始事件,接着就是创建任务和分配任务时触发任务监听器。

绿框标记部分说明待办任务调用审批通过接口后会触发任务监听器的完成事件,如果满足了该节点完成条件,就会连续触发的待办任务对应的执行监听器结束事件。

所以动态设置审批人的条件就是要在节点执行监听器的开始事件触发之前就设置好审批人参数。

总结

附图一张,撒花完结。


相关文章
深入探究Camunda加签问题
camunda加签的两种方式
3907 0
|
XML 数据格式
Camunda常用功能
Camunda常用接口简介
4811 1
Camunda常用功能
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
10140 1
|
监控 Java Linux
开源流程引擎Camunda
开源流程引擎Camunda
|
数据可视化 JavaScript 前端开发
BPMN 2.0 建模符号图标介绍说明
BPMN 2.0 建模符号图标介绍说明
1872 0
|
存储 Java 测试技术
|
运维 监控 Java
Tomcat配置参数connection-timeout的详细解析和应用讨论
`connection-timeout` 的配置需要根据实际的应用场景、服务器性能、网络环境以及用户行为来决定。因此,开发和运维团队通常需要结合应用特点和监控数据,经过一系列的测试和调优,来确定一个既能保证用户体验,又能维护服务器稳定性和安全性的最优值。
1144 0
|
前端开发
基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式
基于jeecg-boot的flowable流程自定义业务驳回到发起人的一种处理方式
1100 0
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
3236 0
SpringBoot整合Flowable【07】- 驳回节点任务