AgilePoint 的流程變數
一般的工作流程或電子表單的軟體, 最常用的方式是一張表單, 一個流程, 通常也會對應至一個資料表, 因此我們會看到有些Workflow的軟體, 所強調的流程整合是利用表單資料轉換的方式來進行, 請購轉換為採購單, 採購單轉換為驗收單, 驗收單再轉換為付款單, 類似此種架構, 主要是因為他們的架構上表單與資料是密不可分的緣故.
AgilePoint 是採用前端輸出入介面, 流程, 資料三者分離的架構, 因此可視為三者是獨立存在.
我不將前端輸出入介面直接稱為表單, 而改稱為輸出入介面, 主要的原因是在AgilePoint 中資料與表單是分離的, 因此流程中所儲存的資料, 我們稱為Custom Attribute 我將他翻譯為流程變數, 其流程變數與表單並無絕對的關係.
流程變數是串起整個流程資料的依據, 就像是網頁程式的Session 變數, 差別在於Session變數只存在於網頁連線的期間, 流程變數是存在於整個流程, 由流程啟動一直到流程完成後都會一直保留在資料庫中.
流程變數在流程資料庫中預設是以XML 的型式儲存, 其優點為無需預先定義資料格式, 可視需要隋時增加變數與修改變數的內容.
流程變數的產生有以下幾種方式:
1.啟動流程時一併建立流程變數.
在AgilePoint要啟動一個流程可以透過CreateProcInst() 的API , 其有兩種形式直接呼叫CreateProcInst()的API 或呼叫其所提供的WebService 介面, 視呼叫單所在的位置決定.
在此API 中可傳輸一個流程變數與資料名稱的陣列, 資料型態為其內定的NameValue[] 的格式, 簡單的說就是由名稱與值所組成的陣列.
因此在表單中輸入資料或外部應用系統如ERP 中只要能呼叫WebService 並且可組成NameValue的Array , 都可以在啟動流程時, 一併將外部資料傳送至AgilePoint 中.
2.透過AgilePoint 所提供的WebControl
在AgilePoint 所提供的WebControl 都有一個BindingName 的屬性, 呼叫啟動流程的API- CreateProcInst()或呼叫完成一個工作(WorkItem)的API – CompletedWorkItem() 時係統會自動將所有具有BindingName 屬性的WebControl 都儲存為流程變數.
3.透過儲存或取得流程變數的API
除了採用具有BiningName 的WebControl 外, 對一般的Asp.net 或ThirdParty所提供的WebControl , 甚至流程資料與顯示無關時都可以透過存取流程變數的API –setCustomAttr()設定單一變數或一次設定多個變數的API -setCustomAttrs()將所需要的資料設定為流程變數, 且無需考慮變數資料是否已經存在, 系統或自動處理新增變數或修改變數的問題.
另外如果需要取得變數的內容亦可透過取得變數的API-getCustomAttr() 取得指定的變數或透過getCustomAttrs()一次取得整個流程的變數, 傳回的資料型態是一個物件的形態, 可視需要作轉型, 如變數資料不存在會傳回null值,因此可依內容作預設值的處理.
以上三種方式是基本的流程變數取得與儲存的方式, 因此任何只要能呼叫WebService的程式或語言都可以透過上述方式與透過流程元件互相溝通.
前面提到流程變數是以XML的形式存在, 惟XML 的缺點是不適合直接查詢特定欄位值或輸出為為報表, 因此必要時我們可以透過AgilePoint提供的資料庫存取元件或客制的AgilePart 將其轉存為一般的資料表, 再作後續的運用.
留言
張貼留言