首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Activiti 流程引擎變量操作實戰:部署、啟動、任務查詢與變量傳遞

     編輯:Java 綜合教學

記錄一次 Activiti 工作流引擎的核心操作實戰,涵蓋流程部署、實例啟動、任務查詢/完成、變量設定與獲取(含對象序列化),代碼基於 JUnit 測試類完整呈現。

環境準備

  • 流程定義檔:StudentLeaveProcess.bpmn + .png
  • 配置檔:activiti.cfg.xml(預設讀取)
  • 實體類:Student(含 id、name)

核心操作代碼彙總

1. 部署流程定義

@Test
public void deployWidthClassPath() {
    Deployment deployment = processEngine.getRepositoryService()
        .createDeployment()
        .addClasspathResource("diagrams/StudentLeaveProcess.bpmn")
        .addClasspathResource("diagrams/StudentLeaveProcess.png")
        .name("學生請假流程")
        .deploy();
    System.out.println("部署ID: " + deployment.getId());
}

2. 啟動流程實例

@Test
public void start() {
    ProcessInstance pi = processEngine.getRuntimeService()
        .startProcessInstanceByKey("studentLeaveProcess");
    System.out.println("實例ID: " + pi.getId());
}

3. 查詢任務(指定辦理人)

@Test
public void findTask() {
    List<Task> list = processEngine.getTaskService()
        .createTaskQuery()
        .taskAssignee("王五")
        .list();
    for (Task task : list) {
        System.out.println("任務ID: " + task.getId() + ", 名稱: " + task.getName());
    }
}

4. 完成任務

@Test
public void completeTask() {
    processEngine.getTaskService().complete("50002"); // 任務ID
    System.out.println("任務完成!");
}

5. 設定流程變量(單個 / Map 批量)

@Test
public void setVariableValues() {
    TaskService taskService = processEngine.getTaskService();
    taskService.setVariable(taskId, "days", 2);
    taskService.setVariable(taskId, "date", new Date());
    taskService.setVariable(taskId, "reason", "發燒了");
    taskService.setVariable(taskId, "student", new Student(1, "張三")); // 對象自動序列化
}

@Test
public void setVariableMap() {
    Map<String, Object> vars = new HashMap<>();
    vars.put("days", 3);
    vars.put("student", new Student(2, "張三1"));
    taskService.setVariables(taskId, vars); // 覆蓋原有變量
}

6. 獲取流程變量

@Test
public void getVariableValues() {
    TaskService taskService = processEngine.getTaskService();
    Integer days = (Integer) taskService.getVariable(taskId, "days");
    Student student = (Student) taskService.getVariable(taskId, "student");
    System.out.println("student: " + student);
}

@Test
public void getVariableMap() {
    Map<String, Object> vars = taskService.getVariables(taskId);
    System.out.println(vars);
}

關鍵資料表對應

  • act_re_deployment:部署資訊
  • act_re_procdef:流程定義
  • act_ru_task:運行時任務
  • act_ru_variable:運行時變量(任務完成自動清理)

實戰提醒

  1. 變量設定後,下一環節辦理人可用各自 taskId 獲取。
  2. setVariables(Map) 會覆蓋該任務所有現有變量,謹慎使用。
  3. 對象變量需實作 Serializable,否則序列化失敗。

完整測試類見代碼區,可直接複製跑通流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved