文章目录
1.流程变量概念
使用流程变量进行业务数据的传递,例如请假原因、天数等信息。
2.设置流程变量
2.1.在启动流程实例时设置
在启动流程实例时,可以添加流程变量。这是添加流程变量的一种时机。
/**
* 设置流程变量方式一:在启动流程实例时设置
*/
public void test1() {
String processDefinitionKey = "HelloWorldKsy";
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("key1", "value1");
variables.put("key2", 200);
ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(processDefinitionKey, variables);
System.out.println(pi.getId());
}
说明:
1) 在启动流程实例时,通过重载startProcessInstanceByKey的方法可以加载流程变量。
2) 第二个参数要求是Map<String ,Object>类型,意味着可以添加多个流程变量。
3) 当这段代码执行完以后,会在数据库表act_ru_variable中添加两行记录。
2.2.在办理任务时设置
在办理任务时,有时候任务办理完成以后,要传递一些信息到系统中。这个时候可以利用TaskService这个类来添加流程实例。
/**
* 设置流程变量方式二:在办理任务时设置
*/
public void test3() {
String taskId = "50006";
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("user", new User(1,"小王"));
pe.getTaskService().complete(taskId, variables);
}
3.流程变量支持的类型
Jdk中提供的数据类型(String
、Integer
、List
、Map
…)
自定义的实体类(要求实现序列化接口 Serializable
)
如图是从官网列出来的流程变量的类型:
从图中可以看出包括了大部分封装类型和Date、String和实现了Serializable接口的类的类型。
4.获取流程变量
使用RuntimeService的方法获取
可以通过runTimeService的方法来获取流程变量。说明:这些流程变量是从act_ru_variable这个表中读出来的。
/**
* 获取流程变量方式一:使用RuntimeService的方法获取
*/
public void test6() {
String executionId = "2501";
Map<String, Object> variables = pe.getRuntimeService().getVariables(executionId);
// System.out.println(variables);
Set<String> set = variables.keySet();// key2 key1 user
for (String key : set) {
Object value = variables.get(key);
System.out.println(key + " = " + value);
}
Object value = pe.getRuntimeService().getVariable(executionId, "user");
System.out.println(value);
}