您的位置:首页 > 其它

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

2017-10-29 09:45 411 查看

前提

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

代码

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

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

//在流程启动时设置全局变量
@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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: