天天看點

《Activiti工作流架構》專題(五)-Activiti工作流架構流程變量

文章目錄

  • ​​1.流程變量概念​​
  • ​​2.設定流程變量​​
  • ​​2.1.在啟動流程執行個體時設定​​
  • ​​2.2.在辦理任務時設定​​
  • ​​3.流程變量支援的類型​​
  • ​​4.擷取流程變量​​

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工作流架構流程變量

從圖中可以看出包括了大部分封裝類型和Date、String和實作了Serializable接口的類的類型。

4.擷取流程變量

/**
 * 擷取流程變量方式一:使用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);
}