Flowable的监听器和其他表达式

上篇文章粗略概括了Flowable中常见的一些Service和方法,本篇文章主要讲解监听器的使用。

1.监听器一般是用来左右流程的走向、处理一些业务逻辑。目前我做的一个项目有一个流程需要靠监听器来获取数据并且判断流程的走向。

就上述图片看,这是一个非常简单的流程。作用就是启动该流程后,查询某些数据然后根据数据的结果从而执行下一步。此处若是简单的判断则不需要用到监听器,直接使用条件表达式就能满足了。

监听器可以写在流程中的任何地方,无论是指向线条还是节点都可以。

监听器又分为执行监听器任务监听器两种。(本流程讲解执行监听器)

任务监听器只能在任务节点中创建,也就是在用户节点。两者有不同的地方,但是大体相同我便不在赘述

2.条件表达式的配合使用

我们可以使用流转条件来搭配使用,也可以单独使用。单独使用会涉及表单(表单在下篇讲解)

如图所示,我使用的是条件表达式 

${DataTypeStatus=='false'}       : ${}和我们mybatis中的${}一样属于占位符用来做字符串替换。

DataTypeStatus=='false'  :则代表当该变量为flase时执行。

在BPMN文件中我们也可以看到该条件表达式(学习流程必须要会看懂BPMN文件)

我们可以使用条件表达式配合监听器来左右流程的走向。比如如果我在监听器中查询到没有数据,则可以给 DataTypeStatus赋值为flase,这样流程就不会走向差异数据节点了。

3.执行监听器类型

其中JAVA类处填写类的全限定类名

执行监听器分为:JAVA类、表达式、代理表达式和脚本

JAVA类的监听器用的比较多,而且还可以给该监听器增加字段并且赋值。

赋值后我们在实现接口后可以从方法的参数中获取到这个字段以及

由于上述填写了JAVA类的全限定类名,我们就可以在该类中编写监听器业务代码了。

监听器的类需要实现ExecutionListener接口(也有其他接口可以实现)

实现该接口的方法

实现该接口后流程执行到此处则会进入我们的java类的实现方法中执行,注意这个参数。它代表了流程执行时的上下文信息。

4.DelegateExecution 对象

我们可以根据该对象获取到想要的数据

  1. 获取流程实例信息: DelegateExecution 提供了访问当前流程实例的信息,包括流程实例的ID、流程定义的ID、当前活动节点的ID等。通过这些信息,可以在监听器中获取流程执行的上下文状态。

  2. 控制流程执行: 在监听器中,可以根据 DelegateExecution 提供的方法来控制流程的执行逻辑。例如,可以在特定事件发生时终止流程实例、发送消息、记录日志等。

  3. 操作流程变量: 通过 DelegateExecution 可以访问和操作流程实例的流程变量。流程变量是在流程执行过程中用来存储和传递数据的重要机制,监听器可以根据业务需求读取、更新或删除流程变量。

  4. 获取任务信息: 如果监听器是与用户任务相关联的,DelegateExecution 还可以提供与任务相关的信息,如任务的ID、分配给的用户或组等。

DelegateExecution 在Flowable的监听器中扮演着重要角色,它通过提供流程执行的上下文信息和操作方法,使得监听器能够有效地捕获流程事件并作出相应的业务逻辑响应。

监听器经过业务处理后可以使用

5.条件表达式变量赋值

SpringUtils.getBean(RuntimeService.class).setVariableLocal(processInstanceId, BpmnModelConstants.BPMN_END_TYPE_STATUS, true);

在处理完业务逻辑后可以给上文中的条件表达式赋值,这样流程会知道该怎么走下去

setVariableLocal(String processInstanceId, String variable, Object obj);该方法的参数为流程变量实例ID,条件表达式变量名,值。由于我使用的是'flase',则可直接使用布尔类型的true和flase来赋值。

(如需要帮助和补充可以私信我)

<think>好的,用户想了解如何在Flowable中实现使用监听器。首先,我需要回忆一下Flowable的相关知识,特别是监听器部分。根据提供的引用内容,用户已经有一些资料,但需要整合成清晰的步骤。 首先,应该区分执行监听器(ExecutionListener)任务监听器(TaskListener),因为两者应用场景不同。执行监听器作用于流程执行中的事件,而任务监听器针对用户任务的状态变化。需要分别说明它们的实现方式。 接下来,要介绍如何通过XML配置Java代码两种方式定义监听器。XML配置是常见的静态方式,而动态代码调用可能在特定场景下使用,比如用户提到的通过按钮触发事件。需要确保示例代码正确,并且符合Flowable的语法。 然后,需要考虑监听器的触发时机。例如,执行监听器可以放在流程开始、结束或流转节点时触发,任务监听器则在任务创建、分配或完成时触发。需要明确每个事件类型对应的实际应用场景。 此外,用户提供的引用中提到监听器用于流程走向业务逻辑处理,比如获取数据并决定流程方向。因此,在回答中需要强调监听器在流程控制中的作用,可能涉及表达式或代理类的使用。 还要注意引用标识的正确添加,每个引用来源要对应到相关的说明部分。例如,引用[1]提到ExecutionListenerTaskListener的使用探讨,可以在介绍两种监听器时引用;引用[2]提到监听器处理流程走向,可以在说明监听器用途时引用;引用[3]涉及代码调用任务监听器,可以在动态触发部分引用。 最后,生成的相关问题需要与Flowable监听器相关,可能涉及配置方法、触发时机、动态调用以及实际应用场景等,确保问题能够帮助用户进一步深入学习。 总结步骤:区分监听器类型,说明实现方式(XML代码),触发时机,应用场景,并附上示例引用。检查是否符合用户的所有要求,如使用正确的中文,LaTeX格式无误,问题生成合理等。</think>在Flowable工作流引擎中,监听器是实现流程动态控制的核心组件。以下是具体实现方法: ### 一、监听器类型与实现方式 1. **执行监听器(ExecutionListener)** 作用于流程实例或流程节点的执行事件,通过实现`org.flowable.engine.delegate.ExecutionListener`接口: ```java public class CustomExecutionListener implements ExecutionListener { @Override public void notify(DelegateExecution execution) { // 处理流程变量或业务逻辑 execution.setVariable("approvalStatus", "PASSED"); } } ``` 2. **任务监听器(TaskListener)** 针对用户任务的状态变化事件,实现`org.flowable.engine.delegate.TaskListener`接口: ```java public class AssignmentListener implements TaskListener { @Override public void notify(DelegateTask task) { task.setAssignee("admin"); // 动态分配任务负责人 } } ``` ### 二、XML配置方法(静态绑定) ```xml <process id="approvalProcess"> <!-- 执行监听器配置 --> <startEvent id="start"> <extensionElements> <flowable:executionListener event="start" class="com.example.CustomExecutionListener"/> </extensionElements> </startEvent> <!-- 任务监听器配置 --> <userTask id="task1" name="审批"> <extensionElements> <flowable:taskListener event="create" class="com.example.AssignmentListener"/> </extensionElements> </userTask> </process> ``` *事件类型包括:`start`/`end`(执行监听器)、`create`/`assignment`/`complete`(任务监听器)[^1][^2]* ### 三、动态触发方式 通过`RuntimeService`主动触发监听逻辑: ```java runtimeService.addEventListener(new CustomExecutionListener()); // 注册全局监听器 runtimeService.dispatchEvent(new CustomEvent()); // 触发自定义事件[^3] ``` ### 四、核心应用场景 1. **动态任务分配**:根据业务数据指定处理人 2. **自动跳过网关**:通过变量控制流程分支 3. **业务日志记录**:在`end`事件中持久化审批记录 4. **异常处理**:在`take`事件中实现补偿机制[^2]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值