• Activiti


    1.Activiti中个人任务分配
       1.1分配任务负责人:
        1.1.1 固定分配,每一个任务都是固定的人进行执行
        1.1.2 表达式分配:
         UEL表达式,统一表达式语言,在activiti当中支持两种形式,一种是value,另外一种是method形式
        1.1.3 创建流程图,给每一个环节制定assignee值,通过UEL表达式分配任务负责人
        1.1.4 流程部署
        1.1.5 创建流程实例,制定任务执行人
          /**
          * 启动一个流程实例
          */
         @Test
         public void getInstance(){
          //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
          ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
          //获取RuntimeService
          RuntimeService runtimeService = processEngine.getRuntimeService();
          //定义一个Map集合,存放assignee的值
          Map<String,Object> assMap=new HashMap<>();
          assMap.put("assignee01","zhuyuan");
          assMap.put("assignee02","jingjie");
          assMap.put("assignee03","guangge");
          assMap.put("assignee04","chaoge");
          //启动一个流程实例
          ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday", assMap);
          System.out.println("流程实例Name:"+holiday.getName());
         }
      
      
      
      
      2.流程变量
       2.1 流程变量的含义:我们可以在业务系统和流程系统当中,通过流程变量来制定对应的分支,如:员工请假
        请假天数<=3那么部门经理审批后交给人事,如果>3那么部门经理审批结束后交给总经理审批,总经理结束后交给任务
       
       2.2 流程变量的数据类型:
        string,duble,boolean,short,long,Integer,binary,date日期
        serializable,如果流程变量需要用到pojo当中的属性字段,则该pojo需要实现序列化接口
       
       2.3 流程变量的作用域
        1.默认情况下,流程变量存在整个流程实例当中,每一个环节都可以获取到该变量,称之为global,类似于Java全局变量
        2.任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大,称为local 变量。类似于Java局部变量
        
        3.流程变量案例:
         请假天数<=3那么部门经理审批后交给人事,如果>3那么部门经理审批结束后交给总经理审批,总经理结束后交给任务
         3.1 定义流程图,在流程线上设置流程变量的条件
         3.2 定义POJO,要去实现serializable接口
         3.2 流程部署
         3.3 启动流程实例
          /**
           * 启动流程实例
           */
          @Test
          public void startInstance() {
           //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
           ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
           //获取RuntimeService
           RuntimeService runtimeService = processEngine.getRuntimeService();
           //设置流程变量
           Holiday holiday = new Holiday();
           holiday.setNum(5);
           //定义一个Map集合,存放流程变量的值
           Map<String, Object> assMap = new HashMap<>();
           assMap.put("holiday", holiday);

           //启动流程
           ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday-var", assMap);
           System.out.println("流程实例启动成功~");
          }
         3.4 测试流程执行
       2.4 任务执行时,设置流程变量
        /**
         * 任务执行时,设置流程变量
         */
        @Test
        public void runTask() {

         //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         //获取一个TaskService对象
         TaskService taskService = processEngine.getTaskService();
         //查询代办业务 createTaskQuery查询任务   taskCandidateOrAssigned查询任务执行者   processDefinitionKey:查询流程
         /**
          * taskCandidateOrAssigned匹配规则:1.Assigned   2.配置bpmn文件中定义的值
          * taskAssignee匹配规则:1.Assigned
          */
         /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();*/
         List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").processDefinitionKey("holiday-var").list();
         //分页:List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").listPage(i,j);
         for (Task task : list) {
          System.out.println("任务名称:" + task.getName());
          System.out.println("任务执行人:" + task.getAssignee());
          System.out.println("任务ID:" + task.getId());
          //设置流程变量
          Holiday holiday = new Holiday();
          holiday.setNum(5);
          //定义一个Map集合,存放流程变量的值
          Map<String, Object> assMap = new HashMap<>();
          assMap.put("holiday", holiday);
          //处理任务
          taskService.complete(task.getId(),assMap);
          System.out.println("流程实例ID:" + task.getProcessInstanceId());
         }
        }
       2.5 通过流程实例ID设置流程变量的值
        /**
         * 获取到流程实例ID,跟据流程实例设置流程变量的值
         */
        @Test
        public void getInstanceVar(){
         //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         //获取RuntimeService
         RuntimeService runtimeService = processEngine.getRuntimeService();
         //设置流程变量
         Holiday holiday = new Holiday();
         holiday.setNum(3);
         //设置流程变量
         runtimeService.setVariable("37501","holiday",holiday);
        }
       2.6 根据任务ID,设置流程变量
        /**
         * 根据任务ID,设置流程变量
         */
        @Test
        public void runTask() {
         //获取ProcessEngine对象   默认配置文件名称:activiti.cfg.xml  并且configuration的Bean实例ID为processEngineConfiguration
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
         //获取一个TaskService对象
         TaskService taskService = processEngine.getTaskService();
         //查询代办业务 createTaskQuery查询任务   taskCandidateOrAssigned查询任务执行者   processDefinitionKey:查询流程
         /**
          * taskCandidateOrAssigned匹配规则:1.Assigned   2.配置bpmn文件中定义的值
          * taskAssignee匹配规则:1.Assigned
          */
         /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("lisi").processDefinitionKey("holiday").list();*/
         List<Task> list = taskService.createTaskQuery().taskAssignee("lisi").processDefinitionKey("holiday-var").list();
         //分页:List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("holiday").listPage(i,j);
         for (Task task : list) {
          System.out.println("任务名称:" + task.getName());
          System.out.println("任务执行人:" + task.getAssignee());
          System.out.println("任务ID:" + task.getId());
          //设置流程变量
          Holiday holiday = new Holiday();
          holiday.setNum(5);
          taskService.setVariable(task.getId(),"holiday",holiday);
          //处理任务
          taskService.complete(task.getId());
          System.out.println("流程实例ID:" + task.getProcessInstanceId());
         }
        }
       
       注意问题:
        1、如果UEL 表达式中流程变量名不存在则报错。
        2、如果UEL 表达式中流程变量值为空NULL,流程不按UEL 表达式去执行,而流程结束 。
        3、如果UEL 表达式都不符合条件,流程结束
        4、如果连线不设置条件,会走flow 序号小的那条线
      
      
  • 相关阅读:
    [CareerCup] 13.7 Node Pointer 节点指针
    [LeetCode] Bulls and Cows 公母牛游戏
    [CareerCup] 13.6 Virtual Destructor 虚析构函数
    [CareerCup] 13.5 Volatile Keyword 关键字volatile
    [CareerCup] 13.4 Depp Copy and Shallow Copy 深拷贝和浅拷贝
    [CareerCup] 13.3 Virtual Functions 虚函数
    [CareerCup] 13.2 Compare Hash Table and STL Map 比较哈希表和Map
    [CareerCup] 13.1 Print Last K Lines 打印最后K行
    [CareerCup] 12.6 Test an ATM 测试一个自动取款机
    [LeetCode] Serialize and Deserialize Binary Tree 二叉树的序列化和去序列化
  • 原文地址:https://www.cnblogs.com/F017/p/12642727.html
Copyright © 2020-2023  润新知