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());
    }
}

 

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