1. 程式人生 > >Activiti 流程的掛起與啟用

Activiti 流程的掛起與啟用

當需要暫停使用一個 Activiti 流程時,可以通過呼叫 Activiti 的 API 來實現流程的掛起與啟用。

本文通過 ID 來掛起與啟用流程,流程定義還可以根據 Key 來完成掛起與啟用,根據實際需求來選擇呼叫哪種方法。

流程例項的掛起與啟用

通過 RuntimeService 和 HistoryService 均可實現對流程例項的掛起與啟用操作,因 HistoryService 無用資料較多,相應的查詢操作會佔用更多的時間,所以本文選用 RuntimeService 來實現。

當流程例項被掛起時,無法通過下一個節點對應的任務id來繼續這個流程例項。

通過掛起某一特定的流程例項,可以終止當前的流程例項,而不影響到該流程定義的其他流程例項。

啟用之後可以繼續該流程例項,不會對後續任務造成影響。

    //通過流程例項ID來掛起流程例項
    void suspendProcessInstanceById(String processInstanceId);
    //通過流程例項ID來啟用流程例項
    void activateProcessInstanceById(String processInstanceId);

流程定義的掛起與啟用

通過 RepositoryService 可以實現對流程定義的掛起與啟用操作。

當流程定義被掛起時,已經發起的該流程定義的流程例項不受影響(如果選擇級聯掛起則流程例項也會被掛起)。

當流程定義被掛起時,無法發起新的該流程定義的流程例項。

    //通過流程定義ID來掛起流程定義
    void suspendProcessDefinitionById(String processDefinitionId);
    //第二個引數為是否級聯掛起該流程定義的流程例項
    //第三個引數為掛起這個流程定義的時間,null為立即掛起
    void suspendProcessDefinitionById(String processDefinitionId,
                                      boolean suspendProcessInstances,
                                      Date suspensionDate);
    //啟用流程定義
    void activateProcessDefinitionById(String processDefinitionId);
    void activateProcessDefinitionById(String processDefinitionId,
                                       boolean activateProcessInstances,
                                       Date activationDate);