一、流程圖 二、分配個人任務的方式 1、直接指定辦理人 說明:這樣分配辦理人不夠靈活,因為項目開發中任務的辦理人不要放置在XML當中實際開發中辦理人是不固定的。 2、使用流程變數指定辦理人 2.1 流程圖中的設置 說明:在Activiti中#{username}和${username}的意義是一樣的 ...
一、流程圖
二、分配個人任務的方式
1、直接指定辦理人
說明:這樣分配辦理人不夠靈活,因為項目開發中任務的辦理人不要放置在XML當中實際開發中辦理人是不固定的。
2、使用流程變數指定辦理人
2.1 流程圖中的設置
說明:在Activiti中#{username}和${username}的意義是一樣的。
2.2 流程運行
//部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResourceAsStream("TaskMan.zip"); ZipInputStream zipInputStream = new ZipInputStream(inputStream); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment().name("請假流程") .addZipInputStream(zipInputStream).deploy(); System.out.println("部署成功:部署ID"+deploy.getId()); } //啟動流程,在啟動時就帶入辦理人的流程變數 @Test public void startProcess() { RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String,Object> vars = new HashMap<String,Object>(); vars.put("username", "張三"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess",vars); System.out.println("流程啟動成功,流程實例ID為:"+processInstance.getId()); } //任務查詢 @Test public void findTask() { TaskService taskService = processEngine.getTaskService(); Task task = taskService.createTaskQuery().taskAssignee("張三").singleResult(); System.out.println("張三的任務ID:"+task.getId());//張三的任務ID:2505 } //完成任務,並制定下一任務辦理人 @Test public void doTask() { TaskService taskService = processEngine.getTaskService(); Map<String,Object> vars = new HashMap<String,Object>(); vars.put("username", "李四"); taskService.complete("2505",vars);}
3、使用類指定辦理人(使用監聽器指定辦理人)
作用:當任務到達相應的節點時,會觸發監聽,讓監聽器去指定下個任務的辦理人。
3.1 創建監聽器類(實現TaskListener介面)
//監聽器 public class TaskListenerImpl implements TaskListener {@Override public void notify(DelegateTask delegateTask) { System.out.println("流程到了指定節點"); delegateTask.setAssignee("李四"); } }
3.2 流程圖的變化
設置第二個節點的辦理人為空:
為第二個節點添加監聽器:
流程運行到此節點之後,會觸發監聽器,為此節點設置辦理人。
4、總結
個人任務及三種分配方式:
1,在taskProcess.bpmn中直接寫 assignee=“張三豐"
2,在taskProcess.bpmn中寫 assignee=“#{userID}”,變數的值要是String的。
使用流程變數指定辦理人
3,使用TaskListener介面,要使類實現該介面,在類中定義,
delegateTask.setAssignee(assignee);// 指定個人任務的辦理人
使用任務ID和辦理人重新指定辦理人:
processEngine.getTaskService().setAssignee(taskId, userId);