一、簡(jiǎn)介
Flowable是一個(gè)開(kāi)源的業(yè)務(wù)流程管理工具,它集成了多個(gè)業(yè)務(wù)流程相關(guān)的組件,如工作流引擎、表單處理等。Flowable提供了一套流程定義、部署和執(zhí)行的能力,可以強(qiáng)大地支持復(fù)雜的流程及其模型的管理和運(yùn)行。Flowable提供了簡(jiǎn)單、輕量級(jí)的API通過(guò)Java代碼管理流程,還提供了REST API以及Web服務(wù)。 Flowable 的文檔分為多個(gè)部分:
用戶指南,對(duì)如何使用Flowable進(jìn)行介紹。 開(kāi)發(fā)人員指南,對(duì)如何為Flowable貢獻(xiàn)代碼進(jìn)行介紹。 流程引擎 API,介紹流程引擎 API的概念與使用。 DMN引擎 API,介紹 DMN 引擎 API 的概念與使用。 表單引擎 API,介紹表單引擎 API 的概念與使用。 已知問(wèn)題,會(huì)列出已知的一些問(wèn)題和解決方案。對(duì)于第一次使用Flowable的開(kāi)發(fā)人員,可以從用戶指南中了解 Flowable 的基礎(chǔ)概念和使用方法,隨后在查閱引擎 API 等文檔來(lái)深入處理。
二、工作流引擎
Flowable 的工作流引擎是Flowable的核心部分,提供了以下一些核心功能:
流程定義:描述業(yè)務(wù)流程以及流程中的活動(dòng)(用戶任務(wù)、服務(wù)任務(wù)、網(wǎng)關(guān)、邊界事件等)。 流程部署:將流程定義模板部署到引擎中以便后續(xù)的流程實(shí)例化。 流程實(shí)例:一次業(yè)務(wù)流程的運(yùn)行,包含執(zhí)行過(guò)的任務(wù)實(shí)例信息和執(zhí)行順序等相關(guān)信息。 任務(wù):引擎中的一個(gè)任務(wù)實(shí)例,一個(gè)任務(wù)實(shí)例包含相關(guān)的信息諸如名稱、描述、截止時(shí)間等信息。 執(zhí)行:引擎中執(zhí)行流程的最小單元,一個(gè)執(zhí)行實(shí)例包含相關(guān)的信息諸如父子級(jí)別、是否被中斷等信息,并可以包含一個(gè)或多個(gè)任務(wù)或子執(zhí)行實(shí)例。以下是一個(gè)基本的工作流定義的代碼示例:
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的表單引擎提供了創(chuàng)建表單和調(diào)用表單服務(wù)的能力,支持多種表單類(lèi)型(例如JavaScriptAPI和Freemarker模板)。表單可以嵌入到流程中,以便流程中的用戶可以通過(guò)填寫(xiě)表單等方式來(lái)參與流程。
以下是一個(gè)基本的表單創(chuàng)建定義的代碼示例:
四、Java API
Flowable Java API提供了開(kāi)箱即用的工作流實(shí)現(xiàn),包括業(yè)務(wù)流程以及每個(gè)正在運(yùn)行的業(yè)務(wù)案例中的其他信息。在引擎實(shí)例上使用 Java API 可以查詢流程定義,創(chuàng)建和啟動(dòng)新的流程實(shí)例等。
以下是一個(gè)使用Java API查詢并啟動(dòng)流程的代碼示例:
// 創(chuàng)建引擎實(shí)例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 獲取流程存儲(chǔ)服務(wù)實(shí)例
RepositoryService repositoryService = processEngine.getRepositoryService();
// 獲取運(yùn)行時(shí)服務(wù)實(shí)例
RuntimeService runtimeService = processEngine.getRuntimeService();
// 部署流程定義
Deployment deployment = repositoryService.createDeployment().addClasspathResource("diagrams/test.bpmn20.xml").deploy();
// 查詢流程定義
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.deploymentId(deployment.getId()).singleResult();
// 開(kāi)始流程實(shí)例
ProcessInstance pi = runtimeService.startProcessInstanceById(processDefinition.getId());
五、結(jié)語(yǔ)
Flowable的中文文檔提供了一個(gè)全面的工作流引擎解決方案的實(shí)現(xiàn),其中包括核心功能模塊、表單處理、Java API等。Flowable還提供了一個(gè)輕量的API,以及java和REST服務(wù)的訪問(wèn),方便用戶集成到現(xiàn)存的應(yīng)用程序中。本文所涵蓋的主題不超過(guò)了Flowable文檔的主題范圍,但我們相信,文檔已經(jīng)向您提供了一個(gè)良好的起點(diǎn),以便解決您遇到的任何問(wèn)題并開(kāi)始使用Flowable。