(十七)Activitivi5之組任務分配


一、需求分析

  • 我們在實際業務開發過程中,某一個審批任務節點可以分配一個角色(或者叫做組),然后屬於這個角色的任何一個用戶都可以去完成這個任務節點的審批

 

二、案例

  2.1  方式一:直接流程圖配置中寫死

  • 如下圖,此時有兩個用戶

  • 如下圖,此時有兩個組(角色)

  • 用戶和組(角色)關聯關系表

 

  • 在流程圖中配置

  • 最后部署、啟動流程后,如下查詢候選人 依然要用 taskCandidateUser,由於張三李四都是“管理員”組(角色),所以都可以完成該任務
    /**
     * 查看任務
     */
    @Test
    public void find_task() {
        
        List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskCandidateUser("張三").list();
        for(Task task:taskList){
            System.out.println("任務ID:"+task.getId()); 
            System.out.println("任務名稱:"+task.getName());
            System.out.println("任務創建時間:"+task.getCreateTime());
            System.out.println("任務委派人:"+task.getAssignee());
            System.out.println("流程實例ID:"+task.getProcessInstanceId());
        }
    }

 

 

   2.2  方式二:使用流程變量

 

  • 啟動流程的設置具體的值
  /**
     * 啟動流程實例
     */
    @Test
    public void start(){
        Map<String,Object> variables=new HashMap<String,Object>();
        variables.put("groupId", "管理員);
        ProcessInstance pi=processEngine.getRuntimeService() // 運行時Service
            .startProcessInstanceByKey("groupProcess2",variables); // 流程定義表的KEY字段值
        System.out.println("流程實例ID:"+pi.getId());
        System.out.println("流程定義ID:"+pi.getProcessDefinitionId()); 
    }

 

 

   2.2  方式三:使用taskListener監聽器

 

  • 在監聽器中添加組(角色)

 

package com.shyroke.activiti.listenter;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class MyTaskListener implements TaskListener {

    public void notify(DelegateTask delegateTask) {
        delegateTask.addCandidateGroup("管理員");
    }

}
  • 如下,所有“管理員”組的用戶都可以完成這個任務

 

/**
     * 查看任務
     */
    @Test
    public void find_task() {
        
        List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskCandidateUser("李四").list();
        for(Task task:taskList){
            System.out.println("任務ID:"+task.getId()); 
            System.out.println("任務名稱:"+task.getName());
            System.out.println("任務創建時間:"+task.getCreateTime());
            System.out.println("任務委派人:"+task.getAssignee());
            System.out.println("流程實例ID:"+task.getProcessInstanceId());
        }
    }
    

 


免責聲明!

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



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