(十五)Activitivi5之多用户任务分配

一、概念

  • 我们在开发的时候,有一种情况是这样的,

    我们有一个任务,可以让多个用户中的任何一个人办理即可,比如某个审批任务,

    张三,李四,王五他们中的任何一人办理下都行,这时候,我们用到多用户任务分配。

  1.1  方式一:直接流程图配置中写死

  • 查看任务的时候需要如下
  /**
     * 查看任务
     */
    @Test
    public void findTask(){
        List<Task> taskList=processEngine.getTaskService() // 任务相关Service
            .createTaskQuery() // 创建任务查询
            //.taskAssignee("李四") // 指定某个人
            .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());
        }
    }
  • 启动流程后,任务表中的ASSIGNEE_为空

  • 身份联系表如下图,可知在流程图里配置的用户 全是参与者participant,然后还有一份候选人candidate,候选人绑定任务id,参与者绑定流程实例ID,这里我们可以通过Activiti的接口来增加或者减少候选人

 

  • 我们用张三,李四,王五中的任何一人,都能查询到任务,最后任何一人完整任务即可;

   1.2  方式二:使用流程变量

 

  • 启动流程的时候设置流程变量的值,其他的和上面一样
   /**
     * 启动流程实例
     */
    @Test
    public void start(){
        Map<String,Object> variables=new HashMap<String,Object>();
        variables.put("userIds", "张三,李四,王五");
        ProcessInstance pi=processEngine.getRuntimeService() // 运行时Service
            .startProcessInstanceByKey("multiUserProcess2",variables); // 流程定义表的KEY字段值
        System.out.println("流程实例ID:"+pi.getId());
        System.out.println("流程定义ID:"+pi.getProcessDefinitionId()); 
    }
     

   1.3  分配方式三 TaskListener监听实现

  •  定义一个监听类 MyTaskListener 实现 TaskListener接口
public class MyTaskListener implements TaskListener{
 
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
 
    public void notify(DelegateTask delegateTask) {
        // TODO Auto-generated method stub
        delegateTask.addCandidateUser("张三");
        delegateTask.addCandidateUser("李四");
        delegateTask.addCandidateUser("王五");
    }
 
}
  • 画流程图

原文地址:https://www.cnblogs.com/shyroke/p/8005066.html