伊宏鑫 黑龍江省火電第三工程公司 163000
妙用插件 推波助流
——通達OA工作流設計中使用插件程序掌控列表控件的幾個方法
伊宏鑫 黑龍江省火電第三工程公司 163000
通達OA后臺運行插件程序將列表控件數據轉存至后臺附加的新數據表;并實現列表控件字段不同經辦人的分別寫字段權限。
OA工作流設計;列表控件;數據統計與寫權限;插件程序
OA workflow design;list control;statistics and write access to plug-ins
通達OA網絡智能辦公系統Office Anywhere是由中國兵器工業信息中心開發的協同辦公軟件,其通用性、易用性、健壯性是目前市場同類軟件的佼佼者。除價格、服務、易上手幾個優勢外,其工作流技術尤為令人稱道。從目前推出的最新版本看,其強勁的通用管理能力亦使一般的企業管理提升了品次。但隨著應用水平的不斷提高,應用領域的不斷擴大,用戶也逐漸向個性化需求方向發展。特別是工作流模塊,其亟待解決的就是在工作流設計中列表控件數據統計與寫權限問題。為此,我們針對這一情況進行了二次開發并在實際中解決了這些問題。
通達OA網絡智能辦公系統工作流設計分表單設計和流程設計兩個步驟。在表單設計中,系統提供了實現相同格式記錄的輸入控件“列表控件”,該控件雖然具有較強的數據處理能力但依然存在不足:
1.1 發起多個流程后,無法分類匯總包含在列表控件記錄中的某類數據。如:
發起人于2012.02.12發起的流程,寫入流程表單的列表控件數據(表1),發起人于2012.02.23發起的流程,寫入流程表單的列表控件數據(表2)。

表1 材料采購計劃明細表(元)
發起人:xxx 計劃日期:2012.02.12

表2 材料采購計劃明細表(元)
發起人:xxx 計劃日期:2012.02.23
當在統計2012.02.12日到2012.02.23日發起的兩個流程中釘書器或碳素筆的數量時,列表控件就無能為力,具體的統計結果也不能為及其它流程使用。
1.2 仍然以上述二表為例,現在發起人A在表一中填寫了編號、材料名稱、規格、數量、單位以后,轉交到下一步審核。下一步驟執行人如對材料計劃數量核準有異議,對數量或價格進行更改時,因該控件是對所有有編輯權限的執行人全開,所以,不能對編輯權限字段分別指定,故有錯誤修改數據的風險。
1.3 列表控件的行列數據存儲方式系統默認為一個字段,記錄、字段以標記分隔符形式存儲在后臺數據表的字段中,不宜在工作流設計查詢統計,也不能將統計結果在其它流程中調用。
鑒于以上三點,我們在工作流程設計的步驟中,巧妙利用系統提供的工作流程提交前執行插件程序這一功能來克服上述不足,完成各類工作流功能的擴展。
寫兩套插件程序,一套作為將列表控件數據轉存至后臺附加的新數據表。另一套在后續經辦人改寫列表控件字段后,與第一插件程序回存的新數據表內數據進行組合,再寫回正式工作流后臺數據表。只要后續經辦人被授權改寫列表控件字段,就嵌入該插件程序以完成數據存儲。
仍以前面兩個列表控件數據為例,設計流程表單如下例:

3.1 計劃申請人提出材料采購申請,材料明細表上部控件為計劃申請人填寫。
其中,材料明細表列表控件只填寫,編號、材料名稱、規格、數量、單位。(運行第一套插件程序)
3.2 審核人對計劃申請人提出的材料進行首次確認,在審核意見處填寫審核意見,流程根據給出的意見決定流程走向,不同意回步驟1,同意則轉交下步驟3進行物資部核價。
3.3 物資部核價人對材料明細表中的材料的市場單價、成交價格進行編輯,完成材料明細表。并在核價意見中填寫據體意見,自動轉交到下步驟4批準人辦理(運行第一套插件程序)。
3.4 批準人根據上述經辦人填寫的資料再次確認,并填寫意見,不同意回步驟1,同意則轉交下步驟5物資部采購人。
3.5 物資部采購人根據上述經辦人填寫的資料進行采購,并填寫意見完成流程。
3.6 嵌入插件程序的步驟
(1)計劃申請人提出材料采購申請后數據提交時,第一套插件程序將被執行,列表控件中填寫的,編號、材料名稱、規格、數量、單位字段被寫入新建數據表中(同時存儲必要的工作流特征以便搜索)。
(2)物資部核價人對材料明細表中的材料的市場單價、成交價格進行編輯,完成材料明細表后,執行第二套插件程序,將新建數據表存儲的數據與市場單價、成交價格合并,寫入工作流系統后臺數據表對應字段。
(3)如果后續經辦人仍有改寫列表控件的數據要求時,隨時嵌入第二套插件程序即可,但要在PHP插件程序中明確指定當前經辦人可編輯的字段編號(編號可連續亦可跳躍,數目限制在25以內)。
4.1 后臺新表的建立
打開PHPmyAdmin,打開TD_OA,點擊操作,創建一個名為flow_form_user 的數據表,作為備用。用戶也可根據自己應用的情況自行定義列的個數。如果嫌麻煩可建立SQL腳本新建表,腳本大致如下:


4.2 表單設計的原則
在設計表單時,每個控件都有自己獨立的ID編號,在寫插件程序代碼的過程中,會引用到列表控件的ID,所以,盡可能在最初設計表單時將列表控件作為第一控件加入到表單內部,使其ID為1。如果不為1,可在表單及流程設計完成后,運行一次工作流,在流程后臺數據表FLOW_RUN_ DATA中找到列表控件的ID號。雖然插件程序支持列表控件字段權限的分別控制,還需要在表單設計界面中標注說說明以便于操作人參考。另外,很多用戶要求流程實際打印按照標準A4紙帳打印,我們可以在WORD中設計好A4大小的表格存儲為JPG格式,上傳到服務器的MYOAwebroot images中。打開表單智能設計器點擊添加圖片,在源文件那里填寫“/images/圖片全名”。最后,在預留的空白處添加控件,這樣打印出來的效果就符合用戶要求了。
4.3 用戶參數與代碼編寫
寫代碼時應該考慮3個問題
(1)除了在代碼中明確指定列表控件的ID外,還要明確當前步驟的執行人可編輯的列表控件中相應字段的編號。如:上表中的單價、市場單價編號為6、7.或如中間相隔的如6、9、12等。(因為屏幕大小的限制,一般最多支持25個字段)
(2)需在代碼設計時重點考慮數據讀取與合并,以及數據寫回工作流后臺表部分代碼的設計。因此必須先要對列表控件字段仔細分析。在合并語句中,千萬注意列與行的處理過程。
(3)注意FLOW_ID、RUN_ID、ITEM_ID的聲明和對應關系。
5.1 建立流程并設計好執行權限、可寫字段或一般條件設置,在列表視圖中找到對應步驟中基本設置,點選其它設置,在插件程序名稱中嵌入相應的插件程序一般插件程序都放在服務器安裝路徑中webroot/ general/workflow/plugin/turn/下。
5.2 在發起人嵌入的插件代碼大致如下;


已完成列表控件數據寫回表的過程
5.3 在需要改寫列表控件字段的步驟中嵌入的插件代碼如下:


本步驟代碼含有回存數據表flow_ form_user的部分功能,嵌入代碼后需要驗證該步驟的執行效果,如果顯示出現問題,多半問題出在上述代碼中的Str_Item_Data的部分。上述插件程序可在需要改寫列表控件字段的步驟中重復使用。
至此,即可完成列表控件的存儲與按權限改寫字段的全部能力,既使當前步驟的執行人錯誤修改了其它執行人輸入的字段,在實際組合存儲的過程中也不會發生存儲錯誤,繼而完成了字段保護的目的。另外,后臺回存的表可通過流程再設計將列表字段的內容進行詳細匯總,亦可以設計為數據分析報告,因編輯字段使用數組預先定義,故可應用于其它流程。
Mastery OA running in the background plug-ins list control data transferred to the background, additional data tables. And list control field managers were written permission of fields.
10.3969/j.issn.1001-8972.2012.08.068
伊宏鑫,出生日期:1966.02.27,籍貫:黑龍江寧安,單位:黑龍江省火電第三工程公司HEILONGJIANG No.3THERMAL POWER CONSTRUCTION CORP,職務:網絡工程師,職稱:主任工程師,研究方向:網絡信息技術、企業管理。