flowable监听器

Flowable 有3种监听器,相关内容在开发文档中有详细的说明:

分别实现下面的接口,重写相应的方法可以实现监听。

// 事件监听器接口,可全局监听整个流程
org.flowable.common.engine.api.delegate.event.FlowableEventListener;
// 执行监听器,可监听每一个组件,整个流程也可以配置
org.flowable.engine.delegate.ExecutionListener;
// 任务监听器,主要用来监听节点
org.flowable.engine.delegate.TaskListener;

实现了相应的监听器后,还要在流程设计器中与流程配置绑定才能生效。

事件监听器

可实现流程的全局监听,监听的粒度比较细。支持的监听事件列表可参考开发文档3.18.6

找到资料24. flowable 全局监听,继承下面的接口,再重写与事件对应的方法。感觉这种方式要好用一些。

org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;

另外,开发文档 3.18.3 里面有说明,利用 RuntimeService 就可以在运行时添加监听器。

接口实现

​ 实现FlowableEventListener

@Component
public class WorkFlowListener implements FlowableEventListener {
    @Override
    public void onEvent(FlowableEvent event) {
        System.out.println("全局监听:WorkFlowListener");
    }
 
    @Override
    public boolean isFailOnException() {
        return false;
    }
 
    @Override
    public boolean isFireOnTransactionLifecycleEvent() {
        return false;
    }
 
    @Override
    public String getOnTransaction() {
        return null;
    }
}

​ 实现 AbstractFlowableEngineEventListener

@Component
public class WorkFlowListener1 extends AbstractFlowableEngineEventListener {
 
    @Override
    protected void taskCreated(FlowableEngineEntityEvent event) {
        System.out.println("全局监听:WorkFlowListener1-任务创建");
    }
 
    @Override
    protected void variableCreated(FlowableVariableEvent event) {
        System.out.println("全局监听:WorkFlowListener1-创建变量");
    }
 
    @Override
    protected void processCreated(FlowableEngineEntityEvent event) {
        System.out.println("全局监听:WorkFlowListener1-创建流程");
    }
 
    @Override
    protected void processStarted(FlowableProcessStartedEvent event) {
        System.out.println("全局监听:WorkFlowListener1-开始流程");
    }
 
    @Override
    protected void taskAssigned(FlowableEngineEntityEvent event) {
        System.out.println("全局监听:任务分配");
    }
}

执行监听器

支持流程级别监听。

可监听的事件

  • 流程实例的启动和结束。
  • 流程执行转移。
  • 活动的启动和结束。
  • 网关的启动和结束。
  • 中间事件的启动和结束。
  • 启动事件的结束,和结束事件的启动。

​ 具体选项

start 开始
take 启用
end 结束

在转移上只会触发take事件。当监听器定义在转移上时,event属性的值将被忽略。

接口实现

@Component
public class TestExecutionListener implements ExecutionListener {
    @Override
    public void notify(DelegateExecution execution) {
        System.out.println("执行监听器:" + execution.getEventName());
    }
}

任务监听器

只能监听用户任务;如果监听器不存在是会报错的。

可监听的事件

create 任务已经创建
assignment 已经分配办理人
complete 任务已经完成
delete 任务即将被删除

执行的顺序 

 assignment 分配办理人 → create 创建 → complete 完成 → delete 删除

文档中相关解释

请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。这顺序看起来不太自然,但是有实际原因的:当收到create事件时,我们通常希望能看到任务的所有参数,包括办理人。

接口实现

@Component
public class UserTaskListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        System.out.println("节点监听:" + delegateTask.getEventName());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章