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



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

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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM