一、簡介
Flowable是一個開源的業務流程管理工具,它集成了多個業務流程相關的組件,如工作流引擎、表單處理等。Flowable提供了一套流程定義、部署和執行的能力,可以強大地支持復雜的流程及其模型的管理和運行。Flowable提供了簡單、輕量級的API通過Java代碼管理流程,還提供了REST API以及Web服務。 Flowable 的文檔分為多個部分:
用戶指南,對如何使用Flowable進行介紹。 開發人員指南,對如何為Flowable貢獻代碼進行介紹。 流程引擎 API,介紹流程引擎 API的概念與使用。 DMN引擎 API,介紹 DMN 引擎 API 的概念與使用。 表單引擎 API,介紹表單引擎 API 的概念與使用。 已知問題,會列出已知的一些問題和解決方案。對于第一次使用Flowable的開發人員,可以從用戶指南中了解 Flowable 的基礎概念和使用方法,隨后在查閱引擎 API 等文檔來深入處理。
二、工作流引擎
Flowable 的工作流引擎是Flowable的核心部分,提供了以下一些核心功能:
流程定義:描述業務流程以及流程中的活動(用戶任務、服務任務、網關、邊界事件等)。 流程部署:將流程定義模板部署到引擎中以便后續的流程實例化。 流程實例:一次業務流程的運行,包含執行過的任務實例信息和執行順序等相關信息。 任務:引擎中的一個任務實例,一個任務實例包含相關的信息諸如名稱、描述、截止時間等信息。 執行:引擎中執行流程的最小單元,一個執行實例包含相關的信息諸如父子級別、是否被中斷等信息,并可以包含一個或多個任務或子執行實例。以下是一個基本的工作流定義的代碼示例:
public static BpmnModel createProcessModel() {
BpmnModel model = new BpmnModel();
Process process = new Process();
model.addProcess(process);
process.setId("vacationRequest");
process.addFlowElement(createStartEvent());
process.addFlowElement(createUserTask("userTask1", "Approve or reject request", "assignee == null"));
process.addFlowElement(createExclusiveGateway("ExclusiveGateway1"));
process.addFlowElement(createUserTask("userTask2", "Provide additional details", "assignee == null"));
process.addFlowElement(createEndEvent());
process.addFlowElement(createSequenceFlow("start", "userTask1"));
process.addFlowElement(createSequenceFlow("userTask1", "ExclusiveGateway1"));
process.addFlowElement(createSequenceFlow("ExclusiveGateway1", "userTask2", "${approved == 'false'}"));
process.addFlowElement(createSequenceFlow("ExclusiveGateway1", "end", "${approved == 'true'}"));
process.addFlowElement(createSequenceFlow("userTask2", "ExclusiveGateway1"));
return model;
三、表單引擎
Flowable的表單引擎提供了創建表單和調用表單服務的能力,支持多種表單類型(例如JavaScriptAPI和Freemarker模板)。表單可以嵌入到流程中,以便流程中的用戶可以通過填寫表單等方式來參與流程。
以下是一個基本的表單創建定義的代碼示例:
四、Java API
Flowable Java API提供了開箱即用的工作流實現,包括業務流程以及每個正在運行的業務案例中的其他信息。在引擎實例上使用 Java API 可以查詢流程定義,創建和啟動新的流程實例等。
以下是一個使用Java API查詢并啟動流程的代碼示例:
// 創建引擎實例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 獲取流程存儲服務實例
RepositoryService repositoryService = processEngine.getRepositoryService();
// 獲取運行時服務實例
RuntimeService runtimeService = processEngine.getRuntimeService();
// 部署流程定義
Deployment deployment = repositoryService.createDeployment().addClasspathResource("diagrams/test.bpmn20.xml").deploy();
// 查詢流程定義
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId()).singleResult();
// 開始流程實例
ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
五、結語
Flowable的中文文檔提供了一個全面的工作流引擎解決方案的實現,其中包括核心功能模塊、表單處理、Java API等。Flowable還提供了一個輕量的API,以及java和REST服務的訪問,方便用戶集成到現存的應用程序中。本文所涵蓋的主題不超過了Flowable文檔的主題范圍,但我們相信,文檔已經向您提供了一個良好的起點,以便解決您遇到的任何問題并開始使用Flowable。