1.在流程启动的时候设置全局变量
//在流程启动时设置全局变量
@Test
public void startProcessInstance() {//得到runtimeServiceRuntimeService 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(){//查询任务使用taskserviceTaskService taskService = processEngine.getTaskService();//任务idString 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);
}