Activiti-设置全局变量的四种方法

1.在流程启动的时候设置全局变量

//在流程启动时设置全局变量
@Test
public void startProcessInstance() {
	//得到runtimeService
	RuntimeService runtimeService = processEngine.getRuntimeService();
	//根据流程定义的key(标识)来启动一个实例,activiti找该key下版本最高的流程定义
	//一般情况下为了方便开发使用该方法启动一个流程实例
	String processDefinitionKey = "purchasingflow";
	//在流程启动时设置全局变量,第二个参数variables存储流程变量
	
	Map<String , Object> variables = new HashMap<String,Object>();
	//流程变更名称是assignee,流程变量值是“张三”
	variables.put("assignee", "张三");
	
	
	ProcessInstance processInstance = runtimeService
			.startProcessInstanceByKey(processDefinitionKey, variables);
	
	//根据流程定义的id来启动一个实例,这种方法一般不用
	//runtimeService.startProcessInstanceById(processDefinitionId);
	
	System.out.println("流程变量:" + processInstance.getProcessVariables());

2.任务办理时候设置变量


//办理任务时设置变量
@Test
public void completeTask(){
	//查询任务使用taskservice
	TaskService taskService = processEngine.getTaskService();
	//任务id
	String taskId = "3002";
	//任务办理人
	String assignee = "wangwu";
	//根据任务id和assignee查询该任务
	Task task = taskService
			.createTaskQuery()
			.taskId(taskId)
			.taskAssignee(assignee)
			.singleResult();
	if (task != null) {
		//说明assignee是该任务的办理人,有权限完成
		//taskService.complete(taskId);
		
		//完成任务是设置流程变量
		Map<String, Object> variables = new HashMap<String,Object>();
		//流程变更名称是assignee,流程变量值是“张三”
		//variables.put("assignee", "李四");
		//taskService.complete(taskId, variables);
		taskService.complete(taskId);
		System.out.println("完成任务:" + taskId);
	}
	
}

3.通过当前流程实例id设置


//调用api,通过当前流程实例id设置
@Test
public void setVariableByProcessInstanceId(){
	RuntimeService runtimeService = processEngine.getRuntimeService();
	
	//设置单个变量
	//第一个参数:executionId是流程实例的执行id,通常使用流程实例id,必须是当前正在运行的流程实例id
	//第二个参数:变量名
	//第三个参数:变量值
	runtimeService.setVariable("503", "price", 10000);
	
	//一次设置多个变量,第二个参数是map
	//runtimeService.setVariables(executionId, variables);
}

4.通过当前待办任务设置变量


//通过当前待办任务设置变量
@Test
public void setVariableByTaskId(){
	TaskService taskService = processEngine.getTaskService();
	//设置单个变量
	//第一个参数:taskI是当前待办任务的id,在act_ru_task存在
	//第二个参数:变量名
	//第三个参数:变量值
	taskService.setVariable("2903", "price", 2000);
	
	
	//一次设置多个变量,第二个参数是map
	//taskService.setVariables(taskId, variables);
}