AgilePoint 的流程變數

一般的工作流程或電子表單的軟體, 最常用的方式是一張表單, 一個流程, 通常也會對應至一個資料表, 因此我們會看到有些Workflow的軟體, 所強調的流程整合是利用表單資料轉換的方式來進行, 請購轉換為採購單, 採購單轉換為驗收單, 驗收單再轉換為付款單, 類似此種架構, 主要是因為他們的架構上表單與資料是密不可分的緣故.

clip_image002

AgilePoint 是採用前端輸出入介面, 流程, 資料三者分離的架構, 因此可視為三者是獨立存在.

我不將前端輸出入介面直接稱為表單, 而改稱為輸出入介面, 主要的原因是在AgilePoint 中資料與表單是分離的, 因此流程中所儲存的資料, 我們稱為Custom Attribute 我將他翻譯為流程變數, 其流程變數與表單並無絕對的關係.

clip_image002[5]

流程變數是串起整個流程資料的依據, 就像是網頁程式的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 將其轉存為一般的資料表, 再作後續的運用.

留言

這個網誌中的熱門文章

如何使用SQL Profiler 找到語法錯誤

如何將SQL Server 的查詢輸出寫入文字檔

AgilePoint逐級簽核與指定簽核層級範圍