本文主要是介绍Activiti进阶(四)——流程变量的设置和获取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。
一、设置流程变量
流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。
1.基本类型
-
- @Test
- public void setProcessVariables(){
- String processInstanceId = "1301";
- String assignee = "张三";
- TaskService taskService = processEngine.getTaskService();
-
-
- Task task = taskService.createTaskQuery()
- .processInstanceId(processInstanceId)
- .taskAssignee(assignee)
- .singleResult();
-
-
- taskService.setVariable(task.getId(), "请假人", assignee);
- taskService.setVariableLocal(task.getId(), "请假天数",3);
- taskService.setVariable(task.getId(), "请假日期", new Date());
-
-
- }
对应数据库表:act_ru_variable
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;
- }
-
- }
然后,通过JavaBean设置流程变量。这里要注意的是,
Javabean类型设置获取流程变量,除了需要这个javabean实现了Serializable接口外,还要求流程变量对象的属性不能发生编号,否则抛出异常。
-
- @Test
- public void setProcessVariables(){
- String processInstanceId = "1301";
- String assignee = "张三";
- TaskService taskService = processEngine.getTaskService();
-
-
- Task task = taskService.createTaskQuery()
- .processInstanceId(processInstanceId)
- .taskAssignee(assignee)
- .singleResult();
-
-
- Person p = new Person();
- p.setId(1);
- p.setName("周江霄");
- taskService.setVariable(task.getId(), "人员信息", p);
- System.out.println("流程变量设置成功~~");
- }
数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。
数据库对应表:act_ge_bytearray
二、获取流程变量
1.基本类型
-
- @Test
- public void getProcessVariables(){
- String processInstanceId = "1301";
- String assignee = "张三";
- TaskService taskService = processEngine.getTaskService();
-
- 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);
-
- }
2.
JavaBean类型
-
- @Test
- public void getProcessVariables(){
- String processInstanceId = "1301";
- String assignee = "张三";
- TaskService taskService = processEngine.getTaskService();
-
- Task task = taskService.createTaskQuery()
- .processInstanceId(processInstanceId)
- .taskAssignee(assignee)
- .singleResult();
-
-
- Person p = (Person) taskService.getVariable(task.getId(), "人员信息");
- System.out.println(p.getId()+" "+p.getName());
- System.out.println("获取成功~~");
- }
三、查询历史流程变量
-
- @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());
- }
- }
- }
对应数据库表:act_ru_execution
这篇关于Activiti进阶(四)——流程变量的设置和获取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!