Activiti 學習(三)—— Activiti 流程啟動並完成

低吟不作語發表於2021-09-13

Activiti 流程啟動

流程定義部署後,就可以通過工作流管理業務流程了,也就是說前文部署的出差申請流程可以使用了。針對該流程,啟動一個流程表示發起一個新的出差申請單,這就相當於 java 類與 java 物件的關係,類定義好後需要建立一個物件使用,也可以建立多個物件。對於出差申請流程,張三發起一個出差申請單需要啟動一個流程例項,李四發起一個出差申請單也需要啟動一個流程例項

Activiti 流程啟動主要有兩種方式,分別是根據 processDefinitionKey 啟動和根據 processDefinitionId 啟動

1. 根據 processDefinitionKey 啟動

processDefinitionKey 就是 act_re_procdef 表的 KEY_ 欄位的值,是對應的流程定義的 key

@Test
public void testStartProcess() {
    // 1. 建立 ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 獲取 RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 3. 根據 processDefinitionKey 啟動流程
    ProcessInstance instance = runtimeService.startProcessInstanceByKey("evection");
}

2. 根據 processDefinitionId 啟動

processDefinitionId 就是 act_re_procdef 的主鍵 ID 例如 evection:1:22503

@Test
public void testStartProcess() {
    // 1. 建立 ProcessEngine
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 獲取 RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 3. 根據 processDefinitionKey 啟動流程
    ProcessInstance instance = runtimeService.startProcessInstanceById("evection:1:22503");
}

Activiti 個人任務查詢

流程啟動後,任務的負責人就可以查詢自己當前需要處理的任務,查詢出來的任務都是該使用者的待辦任務

public void testFindPersonTaskList() {
    // 1. 獲取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 獲取 taskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 獲取流程 key 和任務的負責人,查詢任務
    List<Task> taskList = taskService.createTaskQuery()
        .processDefinitionKey("evection")   // 流程key
        .taskAssignee("zhangsan")   // 要查詢的負責人
        .list();
    // 4. 輸出
    for (Task task : taskList) {
        System.out.println("流程例項 id = " + task.getProcessInstanceId());
        System.out.println("任務 id = " + task.getId());
        System.out.println("任務負責人 = " + task.getAssignee());
        System.out.println("任務名稱 = " + task.getName());
    }
}

Activiti 完成個人任務

根據任務 id,也就是 查詢任務並處理

public void completeTask() {
    // 1. 獲取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 獲取 TaskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 根據任務id 完成任務
    taskService.complete("25005");
}

每次都要查詢任務 id 很麻煩,一般來說,是任務負責人查詢待辦任務,選擇任務進行處理,完成任務,那我們就能根據任務負責人和任務 key 來查詢任務並完成

public void completeTask() {
    // 1. 獲取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2. 獲取 TaskService
    TaskService taskService = processEngine.getTaskService();
    // 3. 獲取 jerry - evection 對應的任務
    Task task = taskService.createTaskQuery()
        .processDefinitionKey("evection")
        .taskAssignee("jerry")
        .singleResult();
    // 4. 根據任務 id 完成任務
    taskService.complete(task.getId());
}

以此類推,直至整個出差流程完成


相關文章