flowable學習筆記-簡單流程概念介紹


1 Flowable process engine允許我們創建ProcessEngine 對象和使用 Flowable 的API

ProcessEngine是線程安全的,他是通過 ProcessEngineConfiguration 進行創建的。ProcessEngineConfiguration 可以對 process engine 進行配置和微調。

ProcessEngineConfiguration 是通過 XML 配置文件或者通過編程方式進行創建,最少配置是配置好數據庫鏈接。例子如下

package org.flowable;

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;

public class HolidayRequest {
  public static void main(String[] args) {
    ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
      .setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
      .setJdbcUsername("sa")
      .setJdbcPassword("")
      .setJdbcDriver("org.h2.Driver")
      .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

    ProcessEngine processEngine = cfg.buildProcessEngine();
  }
}

說明:如果是spring環境,配置文件類 StandaloneProcessEngineConfiguration 可以替換成 SpringProcessEngineConfiguration 。

 

2 部署流程定義到 flowable engine,此時需要用到 RepositoryServiceRepositoryService 可以通過 processEngine 獲得。通過向 RepositoryService 傳遞流程定義文件來獲得部署對象。Deployment

部署流程意味着:

1)流程定義會持久化到數據庫中

2)BPMN 2.0 process XML 將會被解析成內存對象模型,該模型可以被 Flowable API 管理。

 

3 開始一個流程實例

到現在流程引擎中已經有了流程定義,開始流程實例之前需要一些流程變量,通過 RuntimeService 啟動一個流程實例。初始變量類型是  java.util.Map,向RuntimeService 對象傳遞初始數據,而變量的 key 和 流程定義文件 BPMN 2.0 XML 中的 id 相匹配。啟動一個流程實例代碼示例如下:

RuntimeService runtimeService = processEngine.getRuntimeService();

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employee", employee);
variables.put("nrOfHolidays", nrOfHolidays);
variables.put("description", description);
ProcessInstance processInstance =
  runtimeService.startProcessInstanceByKey("holidayRequest", variables);

RuntimeService  開啟一個流程是通過流程定義中的 ID ,在 Flowable 中稱作是key。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");

 

 

4 查詢和完成任務

當某一任務賦給一組人時,使用常量即可,如下:

<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>

當要賦給流程變量中的摸一個人時,使用格式如下

<userTask id="holidayApprovedTask" name="Holiday approved" flowable:assignee="${employee}"/>

 

4.1 當要查詢待辦任務時,需要使用 TaskService  ,代碼示例如下:

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
System.out.println("You have " + tasks.size() + " tasks:");
for (int i=0; i<tasks.size(); i++) {
  System.out.println((i+1) + ") " + tasks.get(i).getName());
}

 

4.2 編寫java自動化Service,在BPMN 2.0中稱之為 Service Task,在流程定義中代碼如下

<serviceTask id="externalSystemCall" name="Enter holidays in external system"
    flowable:class="org.flowable.CallExternalSystemDelegate"/>

其中代理類 CallExternalSystemDelegate 需要實現 org.flowable.engine.delegate.JavaDelegate 接口,此時,當流程到該任務時,會實例化該類並執行 execute 方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM