Flowable 任务监听器与执行监听器的介绍

简介: Flowable 任务监听器与执行监听器的介绍

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统

更多nbcio-boot功能请看演示系统

gitee源代码地址

后端代码: https://gitee.com/nbacheng/nbcio-boot

前端代码:https://gitee.com/nbacheng/nbcio-vue.git

在线演示(包括H5) : http://218.75.87.38:9888

1、前言

       在流程设计当中,有时候我们需要流程启动前、中、后去触发一些事件,执行监听器与任务监听器在生产中经常会用在几个方面:

        1.1 动态分配节点处理人。通过前一个节点设置的变量,在运行到下一个节点时设置对应的处理人;

        1.2 当流程运行到某个节点时,发送邮件或短信给待办用户;

        1.3 统计流程处理时长,是否超时等;

        1.4 费用流程结束后需要将金额回写到SAP系统

        1.5业务层面数据处理

     所以在业务需求驱动下,我们需要对Flowable的事件监听器了解研究。

     本文主要针对Flowable 的 ExecutionListener 和 TaskListener 如何使用进行探讨。

2、ExecutionListener 和 TaskListener 区别

     ExecutionListener 和 TaskListener 都是 Flowable 提供的事件监听器,但它们的作用和用途有些不同。

2.1 ExecutionListener

      ExecutionListener 是针对整个流程实例的事件监听器,它可以监听流程实例启动、结束、活动开始、活动结束、连线选择等事件。ExecutionListener 的事件类型和执行时机都是固定的,它不能直接访问任务相关的信息(例如任务的候选人、任务的执行者等),因此通常用于处理与流程实例相关的事件。

执行监听器则监听流程的所有节点和连线。主要有start、end、take事件。其中节点有start、end两种事件,而连线则有take事件。下图是执行监听器的生命周期:

2.2 TaskListener

      TaskListener 顾名思义它是针对任务的事件监听器,它可以监听任务的创建、分配、完成等事件。TaskListener 的事件类型和执行时机是与任务相关的,它可以访问任务相关的信息,并可以对任务进行操作(例如设置任务的执行人、指定任务的代理人等),因此通常用于处理与任务相关的事件。

       任务监听器的生命周期如下图所示,会经历assignment、create、complete、delete。当流程引擎触发这四种事件类型时,对应的任务监听器会捕获其事件类型,再按照监听器的处理逻辑进行处理。

3、▼ TaskListener 如何使用 ▼

事件触发状态有流程:

create(创建):在任务被创建且所有的任务属性设置完成后才触发

assignment(指派):在任务被分配给某个办理人之后触发

complete(完成):在配置了监听器的上一个任务完成时触发

delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发

事件类型:

类 (示例:com.nbcio.demo.listener.FlowExecutionListener)

表达式

委托表达式

事件类型的值:

类 对应类的全路径

表达式 使用的是Spring EL表达式

事件类型使用'类'

创建一个类FlowTaskListener

@Slf4j
@Component
public class FlowTaskListener implements TaskListener {
 
    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("任务监听器:{}", delegateTask);
    }
 
}

事件类型使用'表达式'

<extensionElements> 
    <flowable:taskListener expression="${testExpress.test()}" event="create" /> 
</extensionElements>

Flowable 的表达式语法类似Spring EL, ${testExpress.test()} testExpress代表对象名,因为@Component生成的对象名默认以类名称命名,testExpress.test() 代表调用testExpress的test()方法

@Slf4j
@Component
public class TestExpress {
 
    public void test() {
        log.info("TestExpress被调用了");
    }
 
}

4、ExecutionListener 如何使用 ▼

事件触发状态有流程:启动(start)、结束(end)、在用(take)

事件类型:

类(示例:com.nbcio.demo.listener.FlowExecutionListener)

表达式

委托表达式

事件类型的值:

类 对应类的全路径

表达式 使用的是Spring EL表达式

事件参数:可以配置参数传递到事件中

事件类型使用'类'

创建一个类FlowExecutionListener

 

@Slf4j
@Component
public class FlowExecutionListener implements ExecutionListener {
 
    @Override
    public void notify(DelegateExecution execution) {
        log.info("执行监听器:{}", execution);
    }
 
}

事件类型使用'表达式'

和上文的FlowTaskListener类似,我就不重复了

事件类型使用'委托表达式'

也是和上文的FlowTaskListener类似,偷懒了

5、总结

    看完本文,会发现 Flowable 监听器使用其实并不难,而且可以很灵活地扩展我们的业务

相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
7190 1
|
存储 XML 数据库
Flowable 完整表结构说明(一)
Flowable 完整表结构说明
2787 0
|
10月前
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
1326 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
10月前
|
存储 Java API
SpringBoot整合Flowable【02】- 整合初体验
本文介绍了如何基于Flowable 6.8.1版本搭建工作流项目。首先,根据JDK和Spring Boot版本选择合适的Flowable版本(7.0以下)。接着,通过创建Spring Boot项目并配置依赖,包括Flowable核心依赖、数据库连接等。然后,建立数据库并配置数据源,确保Flowable能自动生成所需的表结构。最后,启动项目测试,确认Flowable成功创建了79张表。文中还简要介绍了这些表的分类和常用表的作用,帮助初学者理解Flowable的工作原理。
2037 0
SpringBoot整合Flowable【02】- 整合初体验
|
10月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
2126 1
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
10月前
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
1541 0
SpringBoot整合Flowable【04】-  通过代码控制流程流转
|
10月前
|
存储 前端开发 Java
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
本文介绍了如何使用Flowable的流程变量来管理绩效流程中的自定义数据。首先回顾了之前的简单绩效流程,指出现有流程缺乏分数输入和保存步骤。接着详细解释了流程变量的定义、分类(运行时变量和历史变量)及类型。通过具体代码示例展示了如何在绩效流程中插入全局和局部流程变量,实现各节点打分并维护分数的功能。最后总结了流程变量的使用场景及其在实际业务中的灵活性,并承诺将持续更新Flowable系列文章,帮助读者更好地理解和应用Flowable。 简要来说,本文通过实例讲解了如何利用Flowable的流程变量功能优化绩效评估流程,确保每个环节都能记录和更新分数,同时提供了全局和局部变量的对比和使用方法。
960 0
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
|
移动开发 前端开发
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
1222 0
|
搜索推荐
基于jeecgboot的flowabale流程节点动态设置审批人的实现
基于jeecgboot的flowabale流程节点动态设置审批人的实现
1829 2
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
53478 11