Activiti流程变量的设置和获取

本文详细介绍了在工作流中如何设置和获取流程变量,包括通过基本类型和JavaBean类型的流程变量设置方法,以及如何查询历史流程变量。流程变量在请假流程等场景中起到关键作用,其设置和获取对流程实例的正确执行至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:https://blog.youkuaiyun.com/zjx86320/article/details/50345731

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。

一、设置流程变量

 流程变量的设置方式有两种,一是通过基本类型设置,第二种是通过JavaBean类型设置。

1.流程启动时设置

// 1.启动流程  
@Test  
public void startProcess() throws Exception {  
	//获取服务对象  
	RuntimeService runtimeService = processEngine.getRuntimeService();  
	//通过流程定义ID开启流程实例,同时添加流程变量  
	String processDefinitionId = "myProcess:3:604";  
	Map<String,Object> variables = new HashMap<String,Object>();  
	variables.put("提示信息", "开启请假流程!!!");  
	runtimeService.startProcessInstanceById(processDefinitionId, variables);  
}  

2.基本类型

/**设置流程变量*/
@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

3.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";//流程实例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.基本类型

/**获取流程变量*/
@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类型

/**获取流程变量*/
@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("获取成功~~");
}

 三、查询历史流程变量

/**查询历史的流程变量*/
@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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值