一種業務系統與工做流系統數據交換的方式web
工做流系統做爲業務系統的業務流程驅動支撐,提供必要的工做流基本功能,如任務提交,撤回,掛起,終止,獲取待辦事項,路由計算等等。除此以外,還提供流程圖設計,參與人指定等流程定義功能。以上工做不可避免地用到業務系統的數據,好比根據業務數據(借款單)的數據進行路由判斷,計算審覈人等。工做流引擎如何獲取業務系統的數據呢?sql
獨立的工做流系統
一個設計良好的工做流系統應該是和業務系統的低耦合的,是獨立於業務系統的。所以要定義雙方的數據交換協議和規則。數據庫
獨立的含義是,一方面要提供標準或默認的流程設計界面,好比路由條件定義界面,參與人(審覈人)指定條件。另外一方面在須要時,能夠根據約定的協議和規則訪問業務系統的數據。
協議的類型有不少種,web服務,RPC,文件系統,比較實用並簡單的是數據庫訪問協議。直白講就是讓工做流系統直接訪問業務系統的數據庫,約定數據庫表的格式。並經過自定義函數和流程變量來增長系統的易用性,使得直接用戶能夠定義工做流。編程
流程變量和函數
流程變量和函數同編程語言中的變量相似,稍有不一樣的是這裏的變量會對應一段計算邏輯。這個計算邏輯多是一段SQL語句,Java代碼。
函數有參數,同變量相似,也有一段代碼,不一樣的是,函數有參數,變量沒有。變量的值和函數由流程引擎負責解釋。在實戰中,實施人員定義流程變量和函數,屏蔽數據複雜性,用戶使用函數和變量定義路由邏輯和參與者邏輯。在實際中,流程變量通常用來存放單據上的數據項,函數能夠用來計算流程參與者。
記錄類型的流程變量
考慮到流程變量的值大多來自某個表的同一條記錄,咱們能夠設計一種叫「記錄」的結構(數據類型),記錄的每一個成員能夠對應表的某個列。具體實現時,一個sql語句,就能夠把全部的成員(列)的值取過來,這樣能夠提升系統的性能。app
流程變量和函數的做用域
變量和函數分兩個做用範圍:系統級和流程級。前者在全部流程中均可使用,後者只能在定義它的流程中使用。編程語言
內置變量
流程系統有幾個內置變量,交易號,業務系統ID。前者用來得到業務系統的交易實例數據,計算流程變量時使用。交易號的例子:單據號。業務系統ID用來區分不一樣的外部業務系統,由於流程系統是獨立的,能夠同時爲多個外部系統提供工做流服務,有必要經過業務系統id進行區分。
業務系統在調用工做流服務時,必須傳入這兩個變量的值。編輯器
變量和函數的屬性
變量的屬性有:類型,計算邏輯,變量說明。類型能夠是簡單類型,如字符串,數字,也能夠是業務類型,如借款單號,員工號。
函數的屬性:函數名,返回值類型,參數,邏輯。
函數參數的屬性:數據類型。
定義數據類型的目的有兩個,一是在定義路由表達式或參與者表達式時根據類型匹配變量,提升易用性,二是能夠作表達式校驗。函數
下面是流程變量的例子:性能
做用範圍 | 變量名稱 | 變量類型 | 變量說明 | 計算邏輯 |
流程 | 申請人工號 | 工號 | 借款單申請人編號。 | select app_emp from hr_loan_request where req_id = :tran_id |
流程 | 申請金額 | 數字 | 借款申請金額。 | select app_amount from hr_loan_request where req_id = :tran_id |
系統 | 交易ID | 字符串 | 內置變量,流程實例關聯的業務系統交易號。 | 業務系統在啓用流程時傳入 |
系統 | 系統ID | 字符串 | 內置變量,業務系統的代號。當工做流系統獨立部署時,用於區分服務的業務系統。 | 業務系統在啓用流程時傳入,不可修改 |
系統 | 用戶ID | 字符串 | 內置變量 | 業務系統在啓用流程時傳入,不可修改 |
流程函數的例子spa
做用範圍 | 函數名稱 | 返回值類型 | 函數說明 | 計算邏輯 |
流程 | biz_role | user | 根據傳入的業務角色名稱和組織機構,返回用戶編號,以逗號分隔 | select user_no from hr_pr_biz_role where role_name =:p_rolename and org= :p_org |
變量和函數定義
流程系統提供變量和函數定義功能,該功能的使用對象是實施人員。這是工做流系統的標準功能。在這個功能裏,提供可視化的界面,供實施人員定義變量和函數,以及其屬性。
變量和函數的邏輯支持多種,好比SQL,webService,RPC,程序集內部調用等等。咱們能夠先實現最簡單的:SQL。
定義路由條件和參與者條件
工做流引擎另一個比較重要的功能就是定義路由條件,和參與者表達式。
路由條件定義在「邊」上,決定流程的走向。路由條件是個邏輯表達式(logical-exp),它的返回時是 true 或者 false;
參與者表達式用來運算某個節點上的活動(activity)由誰參與,參與者表達式的結果是用戶集合或者角色集合。流程引擎根據運算結果,生成用戶的待辦任務,業務系統經過工做流接口取得某個用戶的待辦任務。
工做流系統提供可視化的定義界面。不管是路由條件仍是參與者表達式,都只能是使用流程變量和函數做爲表達式項。系統能夠提供表達式編輯器,函數表達式編輯器,流程變量和函數枚舉界面,提升易用性。
這個功能的目標用戶是直接用戶和實施人員。
表達式解析和函數運算表達式的項除了流程變量就是流程函數,解析天然不成爲問題,求值也是毛毛雨了。