文章目录

1.流程变量概念

使用流程变量进行业务数据的传递,例如请假原因、天数等信息。
《Activiti工作流框架》专题(五)-Activiti工作流框架流程变量_启动流程

2.设置流程变量

2.1.在启动流程实例时设置

启动流程实例时,可以添加流程变量。这是添加流程变量的一种时机。

/**
* 设置流程变量方式一:在启动流程实例时设置
*/
@Test
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这个类来添加流程实例。

/**
* 设置流程变量方式二:在办理任务时设置
*/
@Test
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​​​)
如图是从官网列出来的流程变量的类型:
《Activiti工作流框架》专题(五)-Activiti工作流框架流程变量_官网_02
从图中可以看出包括了大部分封装类型和Date、String和实现了Serializable接口的类的类型。

4.获取流程变量

使用RuntimeService的方法获取

可以通过runTimeService的方法来获取流程变量。说明:这些流程变量是从act_ru_variable这个表中读出来的。

/**
* 获取流程变量方式一:使用RuntimeService的方法获取
*/
@Test
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);
}