1、流程圖
2、分配我的任務的方式
一、直接指定辦理人
說明:這樣分配辦理人不夠靈活,由於項目開發中任務的辦理人不要放置在XML當中實際開發中辦理人是不固定的。
二、使用流程變量指定辦理人
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);
}ide
三、使用類指定辦理人(使用監聽器指定辦理人)
做用:當任務到達相應的節點時,會觸發監聽,讓監聽器去指定下個任務的辦理人。this
3.1 建立監聽器類(實現TaskListener接口)
//監聽器
public class TaskListenerImpl implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("流程到了指定節點");
delegateTask.setAssignee("李四");
}
}
3.2 流程圖的變化
設置第二個節點的辦理人爲空:
爲第二個節點添加監聽器:
流程運行到此節點以後,會觸發監聽器,爲此節點設置辦理人。
四、總結
我的任務及三種分配方式:blog
1,在taskProcess.bpmn中直接寫 assignee=「張三丰"接口
2,在taskProcess.bpmn中寫 assignee=「#{userID}」,變量的值要是String的。ip
使用流程變量指定辦理人開發
3,使用TaskListener接口,要使類實現該接口,在類中定義,部署
delegateTask.setAssignee(assignee);// 指定我的任務的辦理人get
使用任務ID和辦理人從新指定辦理人:input
processEngine.getTaskService().setAssignee(taskId, userId);it