Activiti如何啟動流程並使流程前進
一、流程和任務的關係
以下是一個簡單的請假流程圖,其中有一個開始事件,兩個使用者任務,一個結束事件。
啟動流程後,activiti會自動建立第一個流程節點的使用者任務,然後我們完成第一個使用者任務流程就會前進到下一個流程節點,建立第二個節點的流程任務並刪除第一個流程任務。
二、開啟流程
activiti提供了一個RuntimeService服務元件來在流程執行時對流程例項進行管理與控制。開啟流程就需要使用其中的api
2.1根據流程定義key開啟流程
上一篇部落格中說道了一個流程部署成功後,會在部署資訊表act_re_deployment和流程定義表act_re_procdef中插入記錄。流程定義key就是act_re_procdef表中的KEY_欄位的值。
當表中存在KEY_欄位相同的記錄時,activiti會選擇版本號 VERSION_最新的一條流程定義記錄來開啟流程
/** * 開啟流程,根據流程定義key開啟流程,* 如果流程定義表中有多個相同的流程定義key,activiti會根據版本號欄位VERSION_選擇最新的版本來開啟流程 */ @Test public void test1() { String processDefinitionKey="process"; //開啟流程,得到流程例項物件 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey); System.out.println(processInstance); }
activiti用ProcessInstance這個介面來描述開啟流程後得到的流程例項。
三、查詢使用者任務
開頭說到了開啟流程後會建立第一個流程節點的使用者任務,所以可以使用activiti提供的另一個服務元件TaskService來查詢使用者任務,TaskService中提供了和任務處理相關的api
3.1 TaskQuery
activiti提供了這個介面來封裝任務查詢相關的api,可以通過TaskService來獲取它的實現類物件
TaskQuery taskQuery = taskService.createTaskQuery();
然後taskQuery這個查詢物件的使用和activiti的其他查詢物件類似,先指定查詢條件,再執行查詢。這裡我根據任務的代理人進行查詢,一個任務只能有一個代理人
/** * 查詢開啟流程後自動建立的任務 */ @Test public void test2() { //根據任務的代理人進行查詢,一個任務的代理人是唯一的 Task task = taskService.createTaskQuery().taskAssignee("tom").singleResult(); System.out.println(task); }
activiti用Task來封裝任務物件,對應的是act_ru_task這張表的記錄。建立任務後會在這張表中插入一條記錄。
四、完成任務
可以使用taskService中的方法來完成當前任務,使流程向下一個節點移動。完成任務時需要給定任務id即act_ru_task表的主鍵Id,所以完成任務時可以先通過查詢方法給定條件查詢出一個任務物件,再完成這個任務。
/** * 完成任務,使流程前進到下一個流程節點,並建立下一個節點的任務物件 */ @Test public void test3() { String taskId="4502"; taskService.complete(taskId); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。