zoukankan      html  css  js  c++  java
  • (十五)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("王五");
        }
     
    }
    • 画流程图

  • 相关阅读:
    struts1——静态ActionForm与动态ActionForm
    【入门篇】ANDROID开发之BUG专讲
    oracle undo 复杂度--oracle核心技术读书笔记四
    linux高级技巧:rsync同步(二)
    【c语言】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
    一维动态数组和二维动态数组的创建和使用
    HDU 1788 Chinese remainder theorem again 中国剩余定理
    直接选择排序
    使用enca进行字符集转码
    拒绝switch,程序加速之函数指针数组
  • 原文地址:https://www.cnblogs.com/shyroke/p/8005066.html
Copyright © 2011-2022 走看看