1. 程式人生 > >一種業務系統與工作流系統資料交換的方式

一種業務系統與工作流系統資料交換的方式

一種業務系統與工作流系統資料交換的方式

工作流系統作為業務系統的業務流程驅動支撐,提供必要的工作流基本功能,如任務提交,撤回,掛起,終止,獲取待辦事項,路由計算等等。除此之外,還提供流程圖設計,參與人指定等流程定義功能。以上工作不可避免地用到業務系統的資料,比如根據業務資料(借款單)的資料進行路由判斷,計算稽核人等。工作流引擎如何獲取業務系統的資料呢?

獨立的工作流系統
一個設計良好的工作流系統應該是和業務系統的低耦合的,是獨立於業務系統的。因此要定義雙方的資料交換協議和規則。

獨立的含義是,一方面要提供標準或預設的流程設計介面,比如路由條件定義介面,參與人(稽核人)指定條件。另一方面在需要時,可以根據約定的協議和規則訪問業務系統的資料。
協議的型別有很多種,web服務,RPC,檔案系統,比較實用並簡單的是資料庫訪問協議。直白講就是讓工作流系統直接訪問業務系統的資料庫,約定資料庫表的格式。並通過自定義函式和流程變數來增加系統的易用性,使得直接使用者可以定義工作流。

流程變數和函式
流程變數和函式同程式語言中的變數類似,稍有不同的是這裡的變數會對應一段計算邏輯。這個計算邏輯可能是一段SQL語句,Java程式碼。
函式有引數,同變數類似,也有一段程式碼,不同的是,函式有引數,變數沒有。變數的值和函式由流程引擎負責解釋。在實戰中,實施人員定義流程變數和函式,遮蔽資料複雜性,使用者使用函式和變數定義路由邏輯和參與者邏輯。在實際中,流程變數一般用來存放單據上的資料項,函式可以用來計算流程參與者。
記錄型別的流程變數
考慮到流程變數的值大多來自某個表的同一條記錄,我們可以設計一種叫“記錄”的結構(資料型別),記錄的每個成員可以對應表的某個列。具體實現時,一個sql語句,就可以把所有的成員(列)的值取過來,這樣可以提高系統的效能。

流程變數和函式的作用域
變數和函式分兩個作用範圍:系統級和流程級。前者在所有流程中都可使用,後者只能在定義它的流程中使用。

內建變數
流程系統有幾個內建變數,交易號,業務系統ID。前者用來獲得業務系統的交易例項資料,計算流程變數時使用。交易號的例子:單據號。業務系統ID用來區分不同的外部業務系統,因為流程系統是獨立的,可以同時為多個外部系統提供工作流服務,有必要通過業務系統id進行區分。
業務系統在呼叫工作流服務時,必須傳入這兩個變數的值。

變數和函式的屬性
變數的屬性有:型別,計算邏輯,變數說明。型別可以是簡單型別,如字串,數字,也可以是業務型別,如借款單號,員工號。
函式的屬性:函式名,返回值型別,引數,邏輯。
函式引數的屬性:資料型別。
定義資料型別的目的有兩個,一是在定義路由表示式或參與者表示式時根據型別匹配變數,提高易用性,二是可以做表示式校驗。

變數和函式定義
流程系統提供變數和函式定義功能,該功能的使用物件是實施人員。這是工作流系統的標準功能。在這個功能裡,提供視覺化的介面,供實施人員定義變數和函式,以及其屬性。
變數和函式的邏輯支援多種,比如SQL,webService,RPC,程式集內部呼叫等等。我們可以先實現最簡單的:SQL。

定義路由條件和參與者條件
工作流引擎另外一個比較重要的功能就是定義路由條件,和參與者表示式。
路由條件定義在“邊”上,決定流程的走向。路由條件是個邏輯表示式(logical-exp),它的返回時是 true 或者 false;
參與者表示式用來運算某個節點上的活動(activity)由誰參與,參與者表示式的結果是使用者集合或者角色集合。流程引擎根據運算結果,生成使用者的待辦任務,業務系統通過工作流介面取得某個使用者的待辦任務。
工作流系統提供視覺化的定義介面。無論是路由條件還是參與者表示式,都只能是使用流程變數和函式作為表示式項。系統可以提供表示式編輯器,函式表示式編輯器,流程變數和函式列舉介面,提高易用性。
這個功能的目標使用者是直接使用者和實施人員。

表示式解析和函式運算
表示式的項除了流程變數就是流程函式,解析自然不成為問題,求值也是毛毛雨了。