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