• (十五)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("王五");
        }
     
    }
    • 画流程图

  • 相关阅读:
    ORA-01078:failure in processing system parameters
    pl sql developer登陆界面找不到oracle数据库选项
    PL/SQL Developer 与tnsnames.ora
    查看oracle连接数
    windows路由命令route
    在桌面显示我电脑
    linux 挂载ISO
    scp命令
    ss sp行情
    港股交易最大手数是如何规定的?
  • 原文地址:https://www.cnblogs.com/shyroke/p/8005066.html
Copyright © 2020-2023  润新知