zoukankan      html  css  js  c++  java
  • 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 序号小的那条线

  • 相关阅读:
    scss文件报错处理 (报错信息Invalid CSS after "v": expected 1 selector or at-rule, was 'var api = require)
    vue-countdown组件
    vue dayjs in ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js
    vue you can run: npm install --save !!vue-styles-loader!css-loader?
    解决npm报错:Module build failed: TypeError: this.getResolve is not a function
    【JVM从小白学成大佬】3.深入解析强引用、软引用、弱引用、幻象引用
    【JVM从小白学成大佬】2.Java虚拟机运行时数据区
    【JVM从小白学成大佬】开篇
    【必知必会】深入解析强引用、软引用、弱引用、幻象引用
    【不做标题党,只做纯干货】HashMap在jdk1.7和1.8中的实现
  • 原文地址:https://www.cnblogs.com/danxun/p/12643735.html
Copyright © 2011-2022 走看看