zoukankan      html  css  js  c++  java
  • 09给任务指定办理人的方式

    一、流程图

     
     

    二、分配个人任务的方式

    1、直接指定办理人

     
    说明:这样分配办理人不够灵活,因为项目开发中任务的办理人不要放置在XML当中实际开发中办理人是不固定的。

    2、使用流程变量指定办理人

    2.1 流程图中的设置

     
    说明:在Activiti中#{username}和${username}的意义是一样的。

    2.2 流程运行

    //部署流程
        @Test
        public void bushu() {
            InputStream inputStream = this.getClass().getResourceAsStream("TaskMan.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();
            Map<String,Object> vars = new HashMap<String,Object>();
            vars.put("username", "张三");
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess",vars);
            System.out.println("流程启动成功,流程实例ID为:"+processInstance.getId());
        }
        
        //任务查询
        @Test
        public void findTask() {
            TaskService taskService = processEngine.getTaskService();
            Task task = taskService.createTaskQuery().taskAssignee("张三").singleResult();
            System.out.println("张三的任务ID:"+task.getId());//张三的任务ID:2505
        }
        
        //完成任务,并制定下一任务办理人
        @Test
        public void doTask() {
            TaskService taskService = processEngine.getTaskService();
            Map<String,Object> vars = new HashMap<String,Object>();
            vars.put("username", "李四");
            taskService.complete("2505",vars);

        }

    3、使用类指定办理人(使用监听器指定办理人)

    作用:当任务到达相应的节点时,会触发监听,让监听器去指定下个任务的办理人。

    3.1 创建监听器类(实现TaskListener接口)

    //监听器
    public class TaskListenerImpl implements TaskListener {

        @Override
        public void notify(DelegateTask delegateTask) {
            System.out.println("流程到了指定节点");
            delegateTask.setAssignee("李四");
        }
    }

    3.2 流程图的变化

    设置第二个节点的办理人为空:
     
    为第二个节点添加监听器:
     
    流程运行到此节点之后,会触发监听器,为此节点设置办理人。

    4、总结

    个人任务及三种分配方式:

        1,在taskProcess.bpmn中直接写 assignee=“张三丰"

        2,在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。

             使用流程变量指定办理人

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

             delegateTask.setAssignee(assignee);// 指定个人任务的办理人

         使用任务ID和办理人重新指定办理人:

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

  • 相关阅读:
    Oracle查询错误分析:ORA-01791:不是SELECTed表达式
    Java中DESKeySpec类
    linux发布项目
    mac下搭建cocos2d-x2.2.1版本android编译环境教程
    使用Eigen求解线性方程组
    视觉SLAM十四讲课后答案-ch1
    costmap_2d: obstacle_layer中关于激光雷达障碍物清除不干净的解决
    ch4 激光的前端配准算法一 —— ICP方法
    Project 'cv_bridge' specifies '/usr/include/opencv' as an include dir, which is not found.
    ch3 传感器数据处理II: 激光雷达运动畸变去除
  • 原文地址:https://www.cnblogs.com/Guorisy/p/12099273.html
Copyright © 2011-2022 走看看