09給任務指定辦理人的方式

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

相關文章
相關標籤/搜索