在使用開源流程引擎(如:JBPM、Activiti、Flowable、Camunda等)的時候,經常會遇到這樣的需求,我們需要按照業務需求增加一張資料庫的表,而且這張表是跟工作流引擎有互動的(注意不是一張業務表),那麼如何擴充一張資料庫表并無縫地融入到流程引擎的機制中呢?下面以Camunda BPM為例,介紹如何擴充自定義資料庫表。
假設某一客戶的業務流程很多,有幾百個,這些流程在camunda裡是平層放的,沒有按照業務歸類,不便于管理和使用,客戶希望把這些流程按照業務分類展示,就像一棵目錄樹,分A、B、C一層目錄,A下面又分A1、A2、A3第二層目錄,A1、A2、A3下面放的是具體的業務流程定義。
我們分析這個需求,需要擴充一張資料庫表記錄業務分類目錄,同時需要在流程定義表裡擴充一個字段,關聯這個業務分類目錄,這樣才能實作流程定義按照業務分類展示。
在camunda資料庫裡建立一張表,命名為act_re_proc_catalog(流程分類目錄表)。

MySQL建表語句:
接着建立實體類,實作上面的接口和DbEntity接口,實體類命名為ProcessCatalogEntity。
mapper檔案命名為ProcessCatalog.xml
按照camunda的規則,建立查詢類必須基于接口,是以先建立查詢接口,接口命名為ProcessCatalogQuery.java。
然後建立查詢實作類,命名為ProcessCatalogQueryImpl.java
資料庫操作類類似于DAO類,camunda的規則為xxxManager,我們命名該類為ProcessCatalogManager.java
我們自定義的的mapping檔案需要注冊到全局的mappings.xml中,其實就是mybatis的機制,找到mappings.xml檔案,增加如下一條記錄。
Camunda中大量應用了指令模式,有自己的一套事務管理機制,資料庫操作類必須要在CommandContext.java中進行注冊。
在ProcessEngineConfigurationImpl.java類的initSessionFactories方法中注冊資料庫操作類ProcessCatalogManager。
通過以上的8個步驟,就可以在camunda中任意擴充資料庫表了,同時我們也深入了解camunda原生資料操作機制。
專注雲原生、低代碼、流程引擎研發和應用。免費體驗環境:http://www.yunchengxc.com