zoukankan      html  css  js  c++  java
  • 10组任务

    流程中的某个任务由指定的group来完成,其中group由多个user组成。

    一、直接指定办理组

    1、流程图

     

    2、部署和启动流程

        //部署流程
        @Test
        public void bushu() {
            InputStream inputStream = this.getClass().getResourceAsStream("GroupTask.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();
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
            System.out.println("流程启动成功,流程实例ID为:"+processInstance.getId());
        }
    流程启动之后,任务表中的办理人为空,存放流程办理人的信息表中有八条数据,每个人既是参与者,又是申请者:
     
     

    3、查询组任务

    此处的张三,可以是李四,王五或者赵六,得到的结果一样,每个人都可以看到此任务。
    //查询组任务
        @Test
        public void findGroupTask() {
            TaskService taskService = this.processEngine.getTaskService();
            List<Task> list = taskService.createTaskQuery().taskCandidateUser("张三").list();
            if (null != list && list.size() > 0) {
                for (Task task : list) {
                    System.out.println("任务ID:" + task.getId());
                }
            }
        }

    4、任务拾取

    任务拾取后组任务变成个人任务。
     //任务拾取
        @Test
        public void claim() {
            String taskId="2504";
            TaskService taskService = this.processEngine.getTaskService();
            taskService.claim(taskId, "张三");
            System.out.println("任务拾取成功");
        }

    5、任务回退(设置办理人为空)

     // 任务回退
        @Test
        public void claimBack() {
            String taskId="2504";
            TaskService taskService = this.processEngine.getTaskService();
            taskService.setAssignee(taskId, null);
            System.out.println("任务回退成功");
        }
    在实际开发中:由主任务办理人去设置组任务的办理人,设置时应将组任务办理人查出进行选择。目的就是让组任务变成个人任务。

    6、查询组任务成员列表

     // 查询组任务成员列表
        @Test
        public void findGroupUser(){
            String taskId = "2504";
            List<IdentityLink> list = processEngine.getTaskService()//
                            .getIdentityLinksForTask(taskId);
             //List<IdentityLink> list = processEngine.getRuntimeService()//
            //                .getIdentityLinksForProcessInstance(instanceId);
            for(IdentityLink identityLink:list ){
                System.out.println("userId="+identityLink.getUserId());
                System.out.println("taskId="+identityLink.getTaskId());
                System.out.println("piId="+identityLink.getProcessInstanceId());
                System.out.println("TYPE="+identityLink.getType());
                System.out.println("######################");
            }
        }

    二、使用流程变量指定办理组

    1、流程图

     

    2、在启动时设置办理人

    //启动流程
        @Test
        public void startProcess() {
            RuntimeService runtimeService = this.processEngine.getRuntimeService();
            String processDefinitionKey = "myProcess";
            Map<String,Object> variables=new HashMap<>();
            variables.put("usernames", "张三,李四,王五,赵六");
            runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);
            System.out.println("流程启动成功");
        }

    三、使用监听器指定办理组

    指定步骤与个人任务指定一致。

    四、总结

    组任务及三种分配方式,

        1,在taskProcess.bpmn中直接写 candidate-users=“小A,小B,小C,小D"

        2,在taskProcess.bpmn中写 candidate-users =“#{userIDs}”,变量的值要是String的。

             使用流程变量指定办理人

                  Map<String, Object> variables = new HashMap<String, Object>();

                  variables.put("userIDs", "大大,小小,中中");

        3,使用TaskListener接口,使用类实现该接口,在类中定义,

                //添加组任务的用户

    delegateTask.addCandidateUser(userId1);

    delegateTask.addCandidateUser(userId2);

    组任务分配给个人任务(认领任务),

         processEngine.getTaskService().claim(taskId, userId);

    个人任务分配给组任务,

         processEngine.getTaskService(). setAssignee(taskId, null);

    向组任务添加人员,

         processEngine.getTaskService().addCandidateUser(taskId, userId);

    向组任务删除人员,

         processEngine.getTaskService().deleteCandidateUser(taskId, userId);

    个人任务和组任务存放办理人对应的表,

    act_ru_identitylink表存放任务的办理人,包括个人任务和组任务,表示正在执行的任务

    act_hi_identitylink表存放任务的办理人,包括个人任务和组任务,表示历史任务

    区别在于,如果是个人任务TYPE的类型表示participant(参与者)

                       如果是组任务TYPE的类型表示candidate(候选者)和participant(参与者)

  • 相关阅读:
    ABP学习之路--切换mysql数据库
    关于网站发布后站点访问404的问题
    关于COOKIE在本地可以正常写入发布后不能写入浏览器的问题
    关于CSS层叠样式(颜色+边框+文本属性)
    HTML 自学笔记(HTML框架+表单设计)
    HTML 自学笔记(HTML表格相关标记)
    HTML 自学笔记(HTML的图像标记+超链接的使用)
    HTML 自学笔记(HTML的基本结构+文档设置标记)
    .net的页面在大并发下偶尔出现503错误
    WebService:The remote server returned an error: (400) Bad Request
  • 原文地址:https://www.cnblogs.com/Guorisy/p/12099285.html
Copyright © 2011-2022 走看看