上篇文章粗略概括了Flowable中常见的一些Service和方法,本篇文章主要讲解监听器的使用。
1.监听器一般是用来左右流程的走向、处理一些业务逻辑。目前我做的一个项目有一个流程需要靠监听器来获取数据并且判断流程的走向。
就上述图片看,这是一个非常简单的流程。作用就是启动该流程后,查询某些数据然后根据数据的结果从而执行下一步。此处若是简单的判断则不需要用到监听器,直接使用条件表达式就能满足了。
监听器可以写在流程中的任何地方,无论是指向线条还是节点都可以。
监听器又分为执行监听器和任务监听器两种。(本流程讲解执行监听器)
任务监听器只能在任务节点中创建,也就是在用户节点。两者有不同的地方,但是大体相同我便不在赘述
2.条件表达式的配合使用
我们可以使用流转条件来搭配使用,也可以单独使用。单独使用会涉及表单(表单在下篇讲解)
如图所示,我使用的是条件表达式
${DataTypeStatus=='false'} : ${}和我们mybatis中的${}一样属于占位符用来做字符串替换。
DataTypeStatus=='false' :则代表当该变量为flase时执行。
在BPMN文件中我们也可以看到该条件表达式(学习流程必须要会看懂BPMN文件)
我们可以使用条件表达式配合监听器来左右流程的走向。比如如果我在监听器中查询到没有数据,则可以给 DataTypeStatus赋值为flase,这样流程就不会走向差异数据节点了。
3.执行监听器类型
其中JAVA类处填写类的全限定类名
执行监听器分为:JAVA类、表达式、代理表达式和脚本
JAVA类的监听器用的比较多,而且还可以给该监听器增加字段并且赋值。
赋值后我们在实现接口后可以从方法的参数中获取到这个字段以及值
由于上述填写了JAVA类的全限定类名,我们就可以在该类中编写监听器业务代码了。
监听器的类需要实现ExecutionListener接口(也有其他接口可以实现)
实现该接口的方法
实现该接口后流程执行到此处则会进入我们的java类的实现方法中执行,注意这个参数。它代表了流程执行时的上下文信息。
4.DelegateExecution 对象
我们可以根据该对象获取到想要的数据
-
获取流程实例信息:
DelegateExecution
提供了访问当前流程实例的信息,包括流程实例的ID、流程定义的ID、当前活动节点的ID等。通过这些信息,可以在监听器中获取流程执行的上下文状态。 -
控制流程执行: 在监听器中,可以根据
DelegateExecution
提供的方法来控制流程的执行逻辑。例如,可以在特定事件发生时终止流程实例、发送消息、记录日志等。 -
操作流程变量: 通过
DelegateExecution
可以访问和操作流程实例的流程变量。流程变量是在流程执行过程中用来存储和传递数据的重要机制,监听器可以根据业务需求读取、更新或删除流程变量。 -
获取任务信息: 如果监听器是与用户任务相关联的,
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来赋值。
(如需要帮助和补充可以私信我)