Activiti进阶(四)——流程变量的设置和获取
2017-09-05 09:44
323 查看
流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。
一、设置流程变量
流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。
1.基本类型
[java] view
plain copy
/**设置流程变量*/
@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());
}
对应数据库表:act_ru_variable
2.JavaBean类型
首先,定义JavaBean类。
[java] view
plain copy
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接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。
[java] view
plain copy
/**设置流程变量?去哪个表里查*/
@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("流程变量设置成功~~");
}
数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。
数据库对应表:act_ge_bytearray
二、获取流程变量
1.基本类型
[java] view
plain copy
/**获取流程变量*/
@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);
}
2.JavaBean类型
[java] view
plain copy
/**获取流程变量*/
@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("获取成功~~");
}
三、查询历史流程变量
[java] view
plain copy
/**查询历史的流程变量*/
@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
一、设置流程变量
流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。
1.基本类型
[java] view
plain copy
/**设置流程变量*/
@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());
}
对应数据库表:act_ru_variable
2.JavaBean类型
首先,定义JavaBean类。
[java] view
plain copy
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接口外,还要求流程变量对象的属性不能发生变化,否则抛出异常。
[java] view
plain copy
/**设置流程变量?去哪个表里查*/
@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("流程变量设置成功~~");
}
数据库对应表:act_ru_variable,细心的你可以看到,通过JavaBean设置的流程变量,在act_ru_variable中存储的类型为serializable,变量真正存储的地方在act_ge_bytearray中。
数据库对应表:act_ge_bytearray
二、获取流程变量
1.基本类型
[java] view
plain copy
/**获取流程变量*/
@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);
}
2.JavaBean类型
[java] view
plain copy
/**获取流程变量*/
@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("获取成功~~");
}
三、查询历史流程变量
[java] view
plain copy
/**查询历史的流程变量*/
@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进阶(四)——流程变量的设置和获取
- 工作流引擎Activiti学习第四天(七)--- 设置获取与流程变量
- 【Activiti 基础篇四】流程变量设置与获取方式
- activiti 部署流程定义(InputStream) 流程变量设置 及获取流程变量、查询流程变量历史表
- activity启动流程实例+设置流程变量+获取流程变量+向后执行一步
- activiti 流程框架 保存流程变量 获取流程变量打印问题 toString
- activiti学习--12 个人任务及三种分配方式:直接设置代理人+流程变量设置代理人+实现类的方式设置代理人+将任务代理人设置为别人
- (九)Activitivi5之使用 RuntimeService 设置和获取流程变量
- 文章标题JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- activiti设置流程变量
- activiti 工作流会签 / 多人审批时一人通过也可 / 在当前节点获取下一节点的信息 / 流程部署之后发布之前获取所有节点的信息 / 流程启动开始之前传送之后节点办理人 / 同一结点设置多个监听
- activiti获取用户任务同时查询流程变量 null pointer问题解决。
- 流程变量的设置与获取
- activiti学习--06流程变量:流程变量+变量的类型+流程变量api+设置流程变量1或2+查询流程变量的历史表
- JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- activiti 设置流程变量
- Activiti进阶(四)——流程变量的设置和获取
- Java Activiti(6)--流程变量的添加与获取(表act_ru_variable)
- activiti 设置变量(四)
- Activiti流程变量五步曲 ——by fightingKing