通常工作流系統在設計之初,都會明確的區分流程數據和業務數據。工作流引擎只關心流程數據,爲實現工作流的流轉,會爲工作流引擎設計一套工作流的表結構,來輔助流程引擎的實現。
業務數據是千變萬化的,爲實現各自的業務,會設計一系列業務表。業務表,工作流系統是不關心的。
但是工作流數據和業務數據又是交互的關聯的。
1. 流程和業務數據的基本關聯:
爲了將業務數據和流程數據關聯起來,會有一個關聯表,將流程實例和業務數據關聯。
在eworkflow中,這層關係的設置在 流程實例表(wf_wfentry)中。
每個流程實例都會和具體的一張業務表關聯,(流程需要實現的主業務表),並指明業務表的id字段和描述字段,描述字段可有可無。
每個業務表中都多設置一個流程實例wf_id字段,此字段即=wf_wfentry.id。
通過設置 業務表.wf_id = wf_wfentry.id 和 wf_wfentry.bs_table wf_wfentry.bs_id_field = 業務表.id 將流程和業務關聯起來;
2. 流程和業務數據的交互:
在流程定義和運行的上下文中經常會需要引入業務數據。
比如報銷流程中的,流程定義和運行時,都需要取 報銷金額 做爲判斷幾級審覈的條件,上級審覈,也需要取審覈結果作爲流轉到下一步的依據。
這樣就勢必在流程上下文中引入業務數據:
在eworkflow中,是這樣引入的:
在業務數據的維護模塊,即業務自定義表單中:業務數據集,將業務關鍵字段勾選爲 “流程用”。即將此業務關鍵字標識爲可供流程上下文使用了。
在流程定義時:動作(關聯到的業務表單的動作)的前綴函數設置一個ActionPreFunction,此類負責將業務表單中,勾選的流程用的關鍵字段 持久化到流程上下文中。然後動作的結果中,就可以運用業務關鍵了。
動作結果中設置:
關鍵字段類型不同,做判斷的規則和寫法略不同,遵循java的語法規則。
字符型的變量比較
propertySet.getString("關鍵字名").equals("值")
整數型
propertySet.getLong("關鍵字名")==3 操作符號==,>,<
實數型的
propertySet.getDouble("關鍵字名")>3.5 操作符號==,>,<
日期型的
java.util.Date.compareTo(propertySet.getDate("關鍵字名"),anotherDate) 操作符號
//另外:propertySet還可以在前置後置函數中 propertySet.setString("caller", caller);設置變量值