Activiti的多實例任務和會簽


在一個審批流程中,一次審批對應一個UserTask。正常情況下,一個UserTask只要有一個用戶去complete一下,即一個用戶審批通過就算通過。但是在會簽審批中,需要多方審批,例如需要所有的常務委員都審批通過以后,這個審批節點才算通過。

這個功能需要由Activiti的多實例功能來實現。我們先畫一個正常的審批流程,效果如下圖。
圖片描述

然后需要將這個UserTask轉換為多實例任務,方法是設置“Multi instance”選項中的Collection和Element variable。在這個例子中,Collection設置為assigneeList,而assigneeList表示一個集合,Activiti將為這個集合中的每個元素都創建一個UserTask實例。Element variable設置為assignee,這樣assigneeList集合中的每個元素在UserTask實例中將分別被賦值給assignee變量。
圖片描述

最后將Assignee設置為assignee變量的值,以便於查詢該任務。
圖片描述

流程設計完畢,我們就可以使用了。在進入會簽任務之前,需要設置assigneeList。

ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl("jdbc:mysql://localhost:3306/activiti") .setJdbcUsername("activiti") .setJdbcPassword("activiti") .setJdbcDriver("com.mysql.jdbc.Driver") .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); ProcessEngine processEngine = cfg.buildProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String, Object> variables = new HashMap<>(); variables.put("assigneeList", Arrays.asList("Jack", "Ross", "Tom")); runtimeService.startProcessInstanceByKey("multiple", variables); 

此時Activiti分別為Jack,Ross和Tom分別創建一個任務。他們各自查詢並完成自己的任務,就完成了會簽。

		TaskService taskService = processEngine.getTaskService(); List<Task> taskList = taskService.createTaskQuery().taskAssignee("Jack").list(); taskList.forEach(task -> { taskService.complete(task.getId()); }); 

默認情況下,所有實例都complete之后,UserTask才算結束,但是用戶可以通過設置Completion condition,來自定義UserTask的完成條件。

 
點擊查看更多內容
 

 
轉自:https://www.imooc.com/article/290052 


免責聲明!

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



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