【入门篇】Activiti设置全局变量的四种方法

前提

大家可能会问,既然封装好了,为什么需要设置全局变量,其实对于简单的审批流程,并不需要设置全局变量,但是当存在流程判断的业务流程,这个时候就需要出一个全局变量,把控全局的流程运行情况。

代码

这里我根据燕青老师讲的,自己总结了一下,大概有四种方式。

第一种(在流程启动的时候设置全局变量)

 

//在流程启动时设置全局变量
@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());
	
}

 

 

 

第二种(任务办理时候设置变量)

 

//办理任务时设置变量
@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);
	}
	
}

 

 

 

第三种(通过当前流程实例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);
}

 

 

 

第四种(通过当前待办任务设置变量)

 

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

 

 

 

 

 


 


版权声明:本文为zlt995768025原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。