任务监听器
任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。
任务监听器包含下列属性:
event(事件)(必填):触发任务监听器的任务事件类型。可用的事件有:
#create(创建):当任务已经创建,并且所有任务参数都已经设置时触发。
#assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。这顺序看起来不太自然,但是有实际原因的:当收到create事件时,我们通常希望能看到任务的所有参数,包括办理人。
#complete(完成):当任务已经完成,从运行时数据中删除前触发。
#delete(删除):在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发。
class:需要调用的委托类
这个类必须实现org.flowable.engine.delegate.TaskListener接口。
package com.example.demo.listener;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyTaskCreateListener implements TaskListener {
private static final Logger log = LoggerFactory.getLogger(MyTaskCreateListener.class);
@Override
public void notify(DelegateTask delegateTask) {
log.info("MyTaskCreateListener");
}
}
expression:(不能与class属性一起使用):指定在事件发生时要执行的表达式。
用法见另一篇文章:flowable集成spring boot ----流程动态赋值
delegateExpression:指定一个能够解析为TaskListener接口实现类的对象的表达式。
需要实现org.flowable.engine.delegate.JavaDelegate接口,并在execute方法中提供所需逻辑。当流程执行到达该活动时,会执行方法中定义的逻辑,并按照BPMN 2.0的默认方法离开活动。
哭泣,这里我遇到了问题,按说只要实现了org.flowable.engine.delegate.JavaDelegate接口的委托类,或者实现org.flowable.engine.delegate.TaskListener都可以使用委托表达式进行java服务调用,
这是我的实现类:
package com.example.demo.delegate;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component("myTaskDelegate")
public class MyTaskDelegate implements JavaDelegate {
private static final Logger log = LoggerFactory.getLogger(JavaDelegate.class);
@Override
public void execute(DelegateExecution delegateExecution) {
Map<String, Object> variables = delegateExecution.getVariables();
log.info(variables.toString());
}
}
用户手册也是这么写的,但是我用flowable6.7.0两种实现都报错,报错信息如下,两种实现方式报错一样(spring boot 为2.5.4,本来是2.3.4-release怀疑是不是版本不对换了一下版本)
,使用6.6.0实现TaskListener的类可以,实现JavaDelegate依然不行,提示该类没有实现TaskListener,报错如下:
org.flowable.common.engine.api.FlowableIllegalArgumentException: Delegate expression ${myTaskDelegate} did not resolve to an implementation of interface org.flowable.task.service.delegate.TaskListener
有木有人知道这是什么原因导致的