Activiti

Posted f017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 序号小的那条线
  
  

以上是关于Activiti的主要内容,如果未能解决你的问题,请参考以下文章