背景
Flowable 是一個流行的輕量級的采用 Java 開發的業務流程引擎,通過 Flowable 流程引擎,我們可以部署遵循 BPMN2.0 協定的流程定義(一般為XML檔案)檔案,并能建立流程執行個體,查詢和通路流程相關的執行個體與資料等等。
2016 年 10 月,Activiti 工作流引擎的核心開發者 Tijs Rademakers 離開 Alfresco 公司并在 Activiti 5.22 版本分支基礎上開啟了 Flowable 開源項目。Flowable 項目中包括 BPMN(Business Process Model and Notation)引擎、CMMN(Case Management Model and Notation)引擎、DMN(Decision Model and Notation)引擎、表單引擎(Form Engine)等子產品。
- 2016年10月13日,Tijs Rademakers 釋出Flowable 5.22.0
- 2017.02.15釋出Flowable 6.0,該版本基于Activiti6
- ......
- 2021.12.28釋出Flowable 6.7.2 release
附 Flowable 官方位址:
- Flowable 官方網站:https://www.flowable.com/
- Flowable github:https://github.com/flowable
- Flowable 版本釋出記錄:https://github.com/flowable/flowable-engine/releases?page=1
- Flowable 文檔:https://www.flowable.com/open-source/docs/
中文 Flowable 文檔: https://tkjohn.github.io/flowable-userguide/#chapterApi
- Flowable 教程:https://documentation.flowable.com/latest/howto/tutorial/first-experience
Flowable 使用
1)Flowable UI 使用
與 jBPM 的 Business Central 類似(相對來說 Business Central 功能更強大),Flowable UI 是 Flowable 官方提供給使用者可初始化的流程等資源設計和管理器,使用步驟如下:
Step 1:下載下傳 flowable-6.8.0.zip 檔案,并解壓在 wars 目錄下找到 flowable-ui.war 檔案
- flowable zip 包 github 位址:https://github.com/flowable/flowable-engine/releases/tag/flowable-6.8.0
Step 2:執行 "java -jar flowable-ui.war" 指令啟動 Flowable UI
Step 3:通路 http://localhost:8080/flowable-ui/,并賬密(admin/test)登入
Flowable UI 登入後主要包括以下四個功能(圖如上):
- 任務應用程式(Flowable Task):運作時任務應用,這個提供了啟動流程執行個體、編輯任務表單、完成任務,以及查詢流程執行個體與任務的功能。
- 模組化器應用程式(Flowable Modeler):讓具有模組化權限的使用者可以建立流程模型、表單、選擇表與應用定義。
- 管理者應用程式(Flowable Admin): 管理應用。讓具有管理者權限的使用者可以查詢流程、CMMN、APP、Form、DMN 及 Content 引擎,并提供了許多選項用于修改流程執行個體、任務、作業等。
- 身份管理應用程式(Flowable IDM):為所有 Flowable UI 應用提供單點登入認證功能,并且為擁有 IDM 管理者權限的使用者提供了管理使用者、組與權限的功能。
Step 4:請假流程示例 demo
其中導入的 holiday.bpmn 如下(該流程檔案不能在 Flowable UI 上執行,隻做模組化示例使用):
<process id="holidayRequest" name="Holiday Request" isExecutable="true">
<startEvent id="startEvent"/>
<sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>
<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers" />
<sequenceFlow sourceRef="approveTask" targetRef="decision"/>
<exclusiveGateway id="decision"/>
<sequenceFlow sourceRef="decision" targetRef="externalSystemCall">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
${approved}
]]>
</conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="decision" targetRef="sendRejectionMail">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
${!approved}
]]>
</conditionExpression>
</sequenceFlow>
<serviceTask id="externalSystemCall" name="Enter holidays in external system"
flowable:class="com.flowable.zqh.ExternalDelegateApproved"/>
<sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/>
<userTask id="holidayApprovedTask" name="Holiday approved" flowable:assignee="${employee}"/>
<sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>
<serviceTask id="sendRejectionMail" name="Send out rejection email"
flowable:class="com.flowable.zqh.SendRejectionEmail"/>
<sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/>
<endEvent id="approveEnd"/>
<endEvent id="rejectEnd"/>
</process>
2)Flowable demo
以請假流程作為 Flowable 基本使用示例(流程示例同 Flowable UI):
- 請假流程檔案 holiday.bpmn 配置
同 Flowable UI 示例中的 holiday.bpmn。
- 代碼示例
示例源碼參考 csdn 下載下傳位址:https://download.csdn.net/download/zhuqiuhui/87462589
3)Flowable 與 Spring 內建
spring boot 與 Flowable 內建比較簡單,引入以下依賴後,會自動注入 Flowable 相關核心類,直接在代碼中使用即可。更詳情的參考 Flowable 官方文檔說明:https://www.flowable.com/open-source/docs/bpmn/ch05a-Spring-Boot
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>${flowable.version}</version>
</dependency>
4)流程引擎對比
Flowable 相對于其他流程引擎,優點如下:
- 以 Flowable6.4.1版本為分水嶺,大力發展其商業版産品,開源版本維護不及時,部分功能已經不再開源版釋出,比如表單生成器(表單引擎)、曆史資料同步至其他資料源、ES等
- 支援了流程、CMMN、APP、Form、DMN 及 Content 引擎
- 支援異步執行器、動态腳本等
- Flowable 啟動後會自動初始化 46 張資料表
- ......
Flowable 整體架構
使用引擎 API 是與 Flowable 互動的最常見方式,核心類是 ProcessEngine,從 ProcessEngine 中可以擷取包含工作流/BPM方法的各種服務(與 Activiti5 類似,有興趣可進一步深入)。如下圖所示:
流程引擎系列文章
- 流程引擎之發展史及對比總結:https://blog.csdn.net/zhuqiuhui/article/details/128986403
- 流程引擎之KIE項目簡介:https://blog.csdn.net/zhuqiuhui/article/details/129035796
- 流程引擎之jBPM簡介:https://blog.csdn.net/zhuqiuhui/article/details/129052162
- 流程引擎之Activiti簡介:https://blog.csdn.net/zhuqiuhui/article/details/129107741
- 流程引擎之Camunda簡介:https://blog.csdn.net/zhuqiuhui/article/details/129107897
- 流程引擎之Flowable簡介:https://blog.csdn.net/zhuqiuhui/article/details/129109273
- 流程引擎之compileflow簡介:https://blog.csdn.net/zhuqiuhui/article/details/129109391