• 流程变量的设置和获取


    流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。

    一、设置流程变量
    流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。

    1.基本类型

        /**设置流程变量*/
        @Test
        public void setProcessVariables(){
            String processInstanceId = "1301";//流程实例ID
            String assignee = "张三";//任务办理人
            TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量
            
            //查询当前办理人的任务ID
            Task task = taskService.createTaskQuery()
                    .processInstanceId(processInstanceId)//使用流程实例ID
                    .taskAssignee(assignee)//任务办理人
                    .singleResult();
            
            //设置流程变量【基本类型】
            taskService.setVariable(task.getId(), "请假人", assignee);
            taskService.setVariableLocal(task.getId(), "请假天数",3);
            taskService.setVariable(task.getId(), "请假日期", new Date());
            
            
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    2.JavaBean类型

    首先,定义JavaBean类。

    package cn.gome.d_processVariables;
     
    public class Person implements java.io.Serializable{
        
        private static final long serialVersionUID = 8379071759772449529L;
        
        private Integer id;
        private String name;
        private String education;
        
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    然后,通过JavaBean设置流程变量。这里要注意的是,Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生编号,否则抛出异常。

      /**设置流程变量?去哪个表里查*/
        @Test
        public void setProcessVariables(){
            String processInstanceId = "1301";//流程实例ID
            String assignee = "张三";//任务办理人
            TaskService taskService = processEngine.getTaskService();//获取任务的Service,设置和获取流程变量
            
            //查询当前办理人的任务ID
            Task task = taskService.createTaskQuery()
                    .processInstanceId(processInstanceId)//使用流程实例ID
                    .taskAssignee(assignee)//任务办理人
                    .singleResult();
            
            //设置流程变量【javabean类型】
            Person p = new Person();
            p.setId(1);
            p.setName("周江霄");
            taskService.setVariable(task.getId(), "人员信息", p);
            System.out.println("流程变量设置成功~~");
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
      数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。
    
    • 1

    在这里插入图片描述
    二、获取流程变量
    1.基本类型

    /**获取流程变量*/
    @Test
    public void getProcessVariables(){
        String processInstanceId = "1301";//流程实例ID
        String assignee = "张三";//任务办理人
        TaskService taskService = processEngine.getTaskService();
        //获取当前办理人的任务ID
        Task task = taskService.createTaskQuery()
                .processInstanceId(processInstanceId)
                .taskAssignee(assignee)
                .singleResult();
        
        //获取流程变量【基本类型】
        String person = (String) taskService.getVariable(task.getId(), "请假人");
        Integer day = (Integer) taskService.getVariableLocal(task.getId(), "请假天数");
        Date date = (Date) taskService.getVariable(task.getId(), "请假日期");
        System.out.println(person+"  "+day+"   "+date);
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
           2.JavaBean类型    
    
    • 1
    /**获取流程变量*/
    @Test
    public void getProcessVariables(){
        String processInstanceId = "1301";//流程实例ID
        String assignee = "张三";//任务办理人
        TaskService taskService = processEngine.getTaskService();
        //获取当前办理人的任务ID
        Task task = taskService.createTaskQuery()
                .processInstanceId(processInstanceId)
                .taskAssignee(assignee)
                .singleResult();
        
        //获取流程变量【javaBean类型】
        Person p = (Person) taskService.getVariable(task.getId(), "人员信息");
        System.out.println(p.getId()+"  "+p.getName());
        System.out.println("获取成功~~");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
     三、查询历史流程变量    
    
    • 1
    /**查询历史的流程变量*/
    @Test
    public void getHistoryProcessVariables(){
        List<HistoricVariableInstance> list = processEngine.getHistoryService()
                .createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询
                .variableName("请假天数")
                .list();
        
        if(list != null && list.size()>0){
            for(HistoricVariableInstance hiv : list){
                System.out.println(hiv.getTaskId()+"  "+hiv.getVariableName()+"        "+hiv.getValue()+"        "+hiv.getVariableTypeName());
            }
        }                
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

  • 相关阅读:
    《Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation》2024CVPR
    假设检验(Hypothesis Test)
    数学建模-2022年亚太赛C题(含思路过程和代码)
    SQL 语句学习总结:
    Elasticsearch-Kibana-学习笔记
    合肥工业大学数字逻辑实验三
    SpringBoot 使用WebSocket打造在线聊天室
    【QT】QListWidget
    猿创征文|【React 三】组件实例的三大属性(state、props、refs)
    原码、反码、补码 、位段
  • 原文地址:https://blog.csdn.net/weixin_45817985/article/details/134525029