【入门篇】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);
}
相关文章推荐
- ASP.Net全局变量的设置和读取方法
- angularjs 设置全局变量的7种方法
- 使用全局变量的四种方式:extern、AppDelegate、定义单例对象、NSUserDefaults 和单例工厂的使用方法
- ASP.Net全局变量的设置和读取方法
- ASP.Net下两种全局变量的设置和读取方法
- Ionic 跨平台开发之AngularJS全局变量设置的三种方法
- ASP.Net全局变量的设置和读取方法
- 在BSP的.bat文件下设置全局变量的方法
- angularjs 设置全局变量的7种方法
- jmeter如何设置全局变量以及调用方法
- lua如何设置只读全局变量——通过元方法与环境
- java环境变量的四种设置方法
- 设置和读取ASP.Net全局变量的方法
- 将properties文件的配置设置为整个Web应用的全局变量实现方法
- JAVA中设置全局变量的方法
- ASP.Net全局变量的设置和读取方法
- ASP.Net下两种全局变量的设置和读取方法
- Mybatis中设置全局变量的方法示例
- ASP.Net全局变量的设置和读取方法
- Linux设置全局环境变量的三种方法