• Activiti 变量设置


      使用工作流的时候必定会附上一些变量。例如,请假的时候有填写请假理由,天数等等。可以用以下代码实现

      

    public void setVariables(){
            /**与任务(正在执行)*/
            TaskService taskService = processEngine.getTaskService();
            //任务ID
            String taskId = "1904";
            /**一:设置流程变量,使用基本数据类型*/
            //taskService.setVariableLocal(taskId, "请假天数", 3);//与任务ID绑定 local变量与任务id绑定,当进行到下一步的时候该变量在正在执行不再出现  在act_hi_varinst中还存在
            //taskService.setVariable(taskId, "请假日期", new Date());
            //taskService.setVariable(taskId, "请假原因", "回家探亲");
            //System.out.println("设置流程变量成功!");
            /**二:设置流程变量,使用javabean类型*/
            /**
             * 当一个javabean(实现序列号)放置到流程变量中,要求javabean的属性不能再发生变化
             *    * 如果发生变化,再获取的时候,抛出异常
             *  
             * 解决方案:在Person对象中添加:
             *         private static final long serialVersionUID = 6757393795687480331L;
             *      同时实现Serializable 
             * */
            Person p = new Person();
            p.setId(20);
            p.setName("翠花");
            p.setEducation("翠花123");
            taskService.setVariable(taskId, "人员信息(添加固定版本)", p);
            System.out.println("设置流程变量成功!");
        }

      而获得流程变量则用以下代码实现

      

    public void getVariables()
        {
            TaskService taskService = processEngine.getTaskService();
            String taskId = "2102";
            /**Integer days = (Integer) taskService.getVariable(taskId, "请假天数");
            Date date = (Date) taskService.getVariable(taskId, "请假日期");
            String resean = (String) taskService.getVariable(taskId, "请假原因");
            System.out.println("请假天数:"+days);
            System.out.println("请假日期:"+date);
            System.out.println("请假原因:"+resean);**/
            /**二:获取流程变量,使用javabean类型*/
            Person p = (Person)taskService.getVariable(taskId, "人员信息(添加固定版本)");
            System.out.println(p.getId()+"        "+p.getName()+"        "+p.getEducation());
        }

      可以看到,这里有两种方法设置和获取流程变量,第一种使用数据基本类型,第二种则是使用javabean。两者实现效果一样,但是在数据库中存储的位置不相同。前者可以在act_ru_variable中查询到相关的变量,后者则在act_ge_bytearray中查询。此外,使用javabean设置变量的时候,如果在流程启动后修改了bean则会抛出异常,解决方法如下

      

    package d_processVariable;
    
    import java.io.Serializable;
    
    public class Person implements Serializable{
        
        private static final long serialVersionUID = 6757393795687480331L;//固定版本
        private Integer id;
        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;
        }
        private String name;
        
        private String education;
        public String getEducation() {
            return education;
        }
        public void setEducation(String education) {
            this.education = education;
        }
    }

      只要把bean设置固定版本,即可解决该问题。

      设置的函数有两种,一种是setVariableLocal()另一种是setVariable。前者会把变量和taskId绑定,这样一来,一但流程进入下一步,该变量不可见。只能在act_hi_varinst表中查询到变量。在实际过程中可以根据需要选择

  • 相关阅读:
    一分钟应对勒索病毒WannaCry
    你不知道网络安全有多严峻
    MongoDB 文章目录
    SQL Server 文章目录
    MySQL 文章目录
    领域驱动(DD)目录
    Oracle基本教程
    系统架构研究目录
    设计原则目录
    开源项目学习历程
  • 原文地址:https://www.cnblogs.com/icysnow/p/4729915.html
Copyright © 2020-2023  润新知