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表中查询到变量。在实际过程中可以根据需要选择

posted @ 2015-08-14 14:33  icychen  阅读(2083)  评论(0编辑  收藏  举报