《Activiti/Flowable  深入BPM工作流》-如何設置local流程變量?

 

 

 

《Activiti/Flowable  深入BPM工作流》-如何設置local流程變量?

 

 

一. 問題:

   1. 什麼是local流程變量? 

   2. 如何設置local流程變量?

   3.Local變量設置後成功與否, 如何測試?

 

 

二. 詳情

 

  1. 什麼是local流程變量? 

解答:  流程變量默認作用域是一個流程實例(processInstance), 也可以是一個任務(task)或一個執行實例(execution). 這三個作用域流程實例的範圍最大,成Global變量.

任務和執行實例僅僅是針對一個任務和一個執行實例範圍,範圍沒有流程實例大,成爲local變量.所以local流程變量是包含(一個任務或一個執行實例)

 

特點:

1.  global變量中變量名不能重複. 設置相同名稱的變量,後設置的值會覆蓋前面的變量值.

2. Local變量名可以重複,也可以和global名相同.  local變量由於在不同任務或不同的執行實例中, 作用域互不影響,變量名可以相同,沒有影響.

 

// 辦理任務時設置local流程變量
@Test
public void completTask() {
    //任務id
    String taskId = "";
    TaskService taskService = processEngine.getTaskService();
    // 定義流程變量
    Map<String, Object> variables = new HashMap<String, Object>();
    Holiday holiday = new Holiday ();
    holiday.setNum(3);
    // 定義流程變量

    Map<String, Object> variables = new HashMap<String, Object>();
    //變量名是holiday,變量值是holiday對象
    variables.put("holiday", holiday);
    // 設置local變量,作用域爲該任務
    taskService. setVariablesLocal(tasked, variables );
    taskService.complete(taskId);
}

 

2. 如何通過當前任務設置local變量?

解答: 具體實現code如下

@Test
public void setLocalVariableByTaskId(){
    //當前待辦任務id
    String taskId="1404";
    TaskService taskService = processEngine.getTaskService();
    Holiday holiday = new Holiday ();
    holiday.setNum(3);
    //通過任務設置流程變量
    taskService.setVariableLocal(taskId, "holiday", holiday);
    //一次設置多個值
    //taskService.setVariablesLocal(taskId, variables)
}

注意: 任務id必須是當前任務id, act_ru_task中存在的.

 

3.Local變量設置後成功與否, 如何測試?

方法一: 

  local變量在任務結束後無法在當前流程實例中執行使用,如果後續的流程執行需要用到此變量則會報錯.

方法二:

   在部門經理審覈,總經理審覈,人事經理審覈是設置local變量,可通過HistoryService查詢每個歷史任務時將流程變量的值查詢出來

 

 // 創建歷史任務查詢對象
    HistoricTaskInstanceQuery  historicTaskInstanceQuery  =
    historyService
    .createHistoricTaskInstanceQuery();
    // 查詢結果包括 local變量
    historicTaskInstanceQuery.includeTaskLocalVariables();
    for (HistoricTaskInstance historicTaskInstance : list) {
        System.out.println("==============================");
        System.out.println(" 任 務 id : "  +
        historicTaskInstance.getId());
        System.out.println(" 任 務 名 稱 : "  +
        historicTaskInstance.getName());
        System.out.println(" 任 務 負 責 人 : "  +
        historicTaskInstance.getAssignee());
        System.out.println(" 任 務 local 變 量 : "+
        historicTaskInstance.getTaskLocalVariables());
    }

 

注意:查詢歷史流程變量,特別是查詢 pojo 變量需要經過反序列化,不推薦使用。

 

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章