,丹丹,
(武漢理工大學 能源與動力工程學院,武漢 430063)
隨著計算機技術(shù)的發(fā)展,越來越多的修船企業(yè)開始推行內(nèi)部資源管理系統(tǒng),以實現(xiàn)數(shù)據(jù)流、業(yè)務(wù)流及資金流的最大整合[1-2]。船舶修造企業(yè)的業(yè)務(wù)流程比較復(fù)雜,在實際使用過程中因為外界環(huán)境及企業(yè)自身調(diào)整等因素影響,存在大量優(yōu)化調(diào)整業(yè)務(wù)流程的需要[3]。在有升級及功能擴展等新的需求情況下,現(xiàn)有的資源管理系統(tǒng)開發(fā)架構(gòu)和方式都嚴重依賴原有的軟件開發(fā)方。企業(yè)用戶自身很難進行任何調(diào)整和優(yōu)化[4-5]。導致需求的響應(yīng)不及時,企業(yè)的經(jīng)費投入無法有效控制。針對這些存在的問題,有必要研究一種可以由企業(yè)用戶自己來動態(tài)擴展的修船資源管理系統(tǒng)。
修船企業(yè)從接到船東修理意向后,啟動“報價—合同—開工—施工(修改內(nèi)容動態(tài)調(diào)整)—完工結(jié)算”這一主要的業(yè)務(wù)流程;直到結(jié)算完畢并滿足一定付款條件,船舶駛離修船廠,一筆具體的修理業(yè)務(wù)才算執(zhí)行完畢。在這個流程中,需要船廠、船東、船檢等多個業(yè)務(wù)單位的參與;同時,在船廠內(nèi)部還需要經(jīng)營部、工程部、具體工種業(yè)務(wù)部、財務(wù)部等諸多人員的協(xié)同參與。傳統(tǒng)的修理企業(yè),這些業(yè)務(wù)操作都依靠人工來完成,經(jīng)常出現(xiàn)一條船舶修理完畢后,無法及時獲得具體修理過程中花費的物資、人工、設(shè)備設(shè)施等費用,造成船舶修理企業(yè)在經(jīng)營結(jié)算過程中處于非常不利的地位,或者無法獲得船東的信任,給經(jīng)營工作造成很大影響。
為了避免這些弊端,國內(nèi)部分船舶修理企業(yè)嘗試用信息化的手段進行業(yè)務(wù)信息的管理,并聯(lián)合開發(fā)了一些信息管理系統(tǒng)軟件。這些軟件的應(yīng)用對改善企業(yè)業(yè)務(wù)流程的運行效率起到了一定作用,但仍然存在如下主要不足。
1)業(yè)務(wù)擴充能力不強,已經(jīng)實現(xiàn)的業(yè)務(wù)流程都是固化的,企業(yè)用戶無法調(diào)整修改。
2)完全依賴軟件提供方進行功能升級,需求無法及時響應(yīng),經(jīng)常出現(xiàn)因軟件公司人員變動等導致完全無法響應(yīng)軟件的升級擴展服務(wù)需求。
3)缺乏良好的信息導入和導出接口,無法與企業(yè)的其它信息系統(tǒng)進行數(shù)據(jù)交換和共享,導致信息孤島現(xiàn)象。
4)部分系統(tǒng)無法在高版本的操作系統(tǒng)下運行,系統(tǒng)數(shù)據(jù)庫結(jié)構(gòu)設(shè)計不合理,在數(shù)據(jù)量積累到一定程度后運行非常慢。
運行良好的修船資源管理系統(tǒng),應(yīng)主要包括2個方面的特性:①對業(yè)務(wù)很好的提煉,開發(fā)的系統(tǒng)實用目前階段的業(yè)務(wù)應(yīng)用要求;②關(guān)鍵特性則是具有比較開放的結(jié)構(gòu),能進行功能及業(yè)務(wù)的擴展。程序架構(gòu)隨著時間的發(fā)展經(jīng)歷了單機運行模式、2層C/S模式、2層B/S模式、3層C/S模式、3層B/S模式等階段[2]。但軟件模式中對系統(tǒng)可擴展性一直沒有特別強調(diào)?!翱蓴U展式”這個詞多用在數(shù)據(jù)庫工具軟件方面,用于描述其系統(tǒng)規(guī)模能否擴大,比如,從一臺計算機運行的數(shù)據(jù)庫擴展到多臺計算機運行的分布式數(shù)據(jù)庫系統(tǒng)。本文認為,修船資源管理等信息管理系統(tǒng)的業(yè)務(wù)功能也應(yīng)具有“可擴展式”特性。本文定義的可擴展式系統(tǒng),其特性應(yīng)包括:軟件的企業(yè)用戶方可以對軟件的功能行為進行適當?shù)亩ㄖ?、可以修改業(yè)務(wù)流程的走向、可以用比較簡單的方法擴展系統(tǒng)的功能模塊、可以擴展系統(tǒng)的用戶規(guī)模、系統(tǒng)的數(shù)據(jù)規(guī)模擴展后不會明顯降低業(yè)務(wù)的響應(yīng)速度,等。
隨著計算機技術(shù)的發(fā)展,市面上信息管理類軟件系統(tǒng)的擴展能力也在逐步加強。以程序軟件的升級為例,在客戶端的應(yīng)用程序是一個單獨的EXE執(zhí)行文件的時代,如果程序功能要升級改進,需要系統(tǒng)維護人員手工對每個客戶端的程序進行替換,工作量比較大、效率不高。隨著技術(shù)的發(fā)展,目前可以采用程序自動升級的方式來對程序功能進行擴展[5]。而這個升級擴展方式能夠?qū)崿F(xiàn)的重要前提是程序采用了由一個EXE文件及若干個DLL文件一起組成的形式,其中的EXE文件只是一個框架(即本文中后續(xù)提到的宿主主程序),其功能自身很少需要變動,而需要變動的子功能都封裝在若干個DLL文件中,而這些DLL文件可以直接替換,這樣升級及功能擴展就比較容易實現(xiàn)。
本文設(shè)計的可擴展式系統(tǒng)架構(gòu),所實現(xiàn)的修船資源管理系統(tǒng)的結(jié)構(gòu)及子系統(tǒng)劃分見圖1。
圖1 修船資源管理系統(tǒng)平臺子系統(tǒng)劃分
該架構(gòu)的核心是宿主主程序模塊。本文利用.NET平臺作為開發(fā)工具,基于SOA軟件架構(gòu),運用反射動態(tài)加載等最新的信息技術(shù),完成構(gòu)建修船資源管理平臺系統(tǒng)的宿主主程序模塊開發(fā)。在宿主主程序的支持下,具體的工程管理、人事管理等功能模塊呈現(xiàn)及數(shù)據(jù)信息集成交換,都在該宿主主程序的框架支持下采用統(tǒng)一接口模式呈現(xiàn),為系統(tǒng)功能模塊的擴展和持續(xù)更新奠定堅實基礎(chǔ)。
除了宿主主程序以外,可擴展式系統(tǒng)架構(gòu)還需要開發(fā)配合宿主主程序的用戶系統(tǒng)配置及輔助開發(fā)工具。企業(yè)用戶在該工具平臺支持下,才能對系統(tǒng)業(yè)務(wù)功能進行擴展和調(diào)整,如創(chuàng)建新的業(yè)務(wù)模塊,對業(yè)務(wù)模塊界面元素呈現(xiàn)方式調(diào)整、設(shè)置數(shù)據(jù)加密、解密等。同時,系統(tǒng)平臺中還必須固化基礎(chǔ)共性的標準化軟件模塊及接口。比如通用的輸入驗證函數(shù)、文件上傳下載函數(shù)、消息傳遞函數(shù)等。
構(gòu)造可擴展式應(yīng)用系統(tǒng),要解決一系列關(guān)鍵技術(shù),如數(shù)據(jù)信息表的自動構(gòu)造,業(yè)務(wù)信息界面的自動創(chuàng)建與編譯,用戶自定義報表,不同系統(tǒng)間的信息集成,對外界信息的導入/導出,等。限于篇幅,僅以其中幾個典型問題為例進行描述。
軟件功能擴展分為2種主要需求類型,一種是由用戶自己對軟件功能進行切換,比如,某個功能是否啟用、計算公式進行調(diào)整、界面控件位置進行調(diào)整等;另一種是擴展增加新的功能模塊。比較友好的方式是這些擴展調(diào)整都能由用戶自己完成,這樣將大大提升系統(tǒng)擴展的靈活性。對第一種情況,本文采用軟件配置的方式來實現(xiàn)。配置信息的保存,傳統(tǒng)多采用INI文件、系統(tǒng)注冊表這兩種方式。但INI文件方式容易暴露信息,而且讀取和設(shè)置相對麻煩。系統(tǒng)注冊表則可能會被相關(guān)安全軟件攔截,而且系統(tǒng)重新安裝后會導致信息丟失。同時,這2種方式都需要將配置信息保存到每個用戶的計算機,對全局性多個用戶共同使用的信息則在更新后需要刷新本地信息,帶來不必要的麻煩。因此,本文采用將信息集中到服務(wù)器端存儲的作法。建立一個系統(tǒng)參數(shù)配置表,將全局性質(zhì)的參數(shù)配置都保存在該表中,該表的結(jié)構(gòu)見表1。
表1 系統(tǒng)參數(shù)設(shè)置表
相應(yīng)地,在程序系統(tǒng)中應(yīng)提供用戶對系統(tǒng)參數(shù)進行配置修改的界面,見圖2。
圖2 運行中系統(tǒng)參數(shù)修改配置界面
通過參數(shù)配置的調(diào)整,企業(yè)用戶就可以根據(jù)業(yè)務(wù)邏輯調(diào)整需要對程序功能進行變動,而不需要對程序系統(tǒng)進行任何的修改,實現(xiàn)了功能擴展的一種形式實現(xiàn)。
軟件功能的擴展性,主要指在軟件模塊不進行升級的情況下,通過修改軟件系統(tǒng)的配置信息,能動態(tài)的增加軟件中原來不存在的功能節(jié)點或模塊。在這個過程中,軟件配置信息是基礎(chǔ)信息,但將配置信息中的內(nèi)容及DLL文件中的功能模塊函數(shù)進行合理的組織,就需要用到反射加載等技術(shù)。雖然DLL方式已經(jīng)大大提升了應(yīng)用程序的擴展性,但這種技術(shù)只能對已經(jīng)具有的功能進行升級,而不容易實現(xiàn)將系統(tǒng)之前沒有的全新功能模塊添加到應(yīng)用系統(tǒng)中去。但采用反射技術(shù),則能很方便地實現(xiàn)這一目標。因此反射和DLL方式是兩種基于不同擴展目標的擴展方式,而且實際上反射方式中需要用到DLL技術(shù)。
實現(xiàn)反射機制的調(diào)用主要步驟見圖3。
圖3 反射調(diào)用的流程
反射技術(shù)的本質(zhì)是通過字符串來調(diào)用加載類中的方法或創(chuàng)建窗體,這樣就提供了在軟件交付后通過擴充DLL文件并結(jié)合在軟件配置信息中設(shè)置后增加新功能模塊的能力。如下示意的通過反射加載的示例代碼,其運行后就可以動態(tài)在程序主界面上顯示“Test.dll”中定義的“FrmTest”窗體。
Dim k As String = "kTest.FrmTest"
Dim lj As String= "d:Test.dll"
Dim kj As Assembly = Assembly.LoadFrom(lj)
Dim temptype As Type = kj.GetType(k)
Dim aForm As Form = Activator.CreateInstance(temptype)
aForm.MdiParent = Me
aForm.Parent = Me.Panel3
aForm.Show()
從示例來看,利用反射技術(shù)可以在程序運行過程中動態(tài)根據(jù)字符串來加載需要執(zhí)行的函數(shù)或調(diào)用的窗體;因此可方便的實現(xiàn)程序功能的擴展。利用反射技術(shù)實現(xiàn)的動態(tài)加載子界面見圖4。
圖4 實現(xiàn)的某系統(tǒng)反射加載界面示例
在資源管理系統(tǒng)的開發(fā)過程中,輸入驗證是一個基礎(chǔ)性的邏輯業(yè)務(wù)。而且,設(shè)計不合理的系統(tǒng)在輸入驗證上將需要花費大量的時間,還不能做到輸入業(yè)務(wù)的用戶配置修改。因此,本文將基礎(chǔ)的輸入驗證設(shè)計為標準調(diào)用函數(shù)?;A(chǔ)的輸入驗證包括如下4種主要類型:
1)輸入類型控制。如輸入金額的地方只能輸入0~9的數(shù)字等,如果用戶輸入的內(nèi)容不合法,應(yīng)限定無法輸入。
2)輸入數(shù)據(jù)的有效性。如輸入性別的字段,應(yīng)只能從“男、女”2種情況中進行選擇。
3)必須輸入性控制。必須輸入的字段要輸入,如果沒有輸入則給出友好的提示,并限定不能保存到后端的數(shù)據(jù)庫。
4)重復(fù)性控制。不允許重復(fù)的字段,在輸入的信息與已經(jīng)保存的信息有重復(fù)時,給出友好的提示,并限定不能保存的后端的數(shù)據(jù)庫。
不同類型的輸入驗證要求,本文采用不同的控制手段。對第1種輸入類型控制的情況,采用不同的控件來進行限制,比如日期輸入控件、文本輸入控件、數(shù)字輸入控件等。對第2種輸入數(shù)據(jù)的有效性控制,采用結(jié)合輸入控件及控件的數(shù)據(jù)源選項一起進行控制,比如單選按鈕組、下拉列表控件綁定特定的數(shù)據(jù)來源。對第3、4這2種情況,采用在配置信息中設(shè)置字段輸入要求,在保存時用函數(shù)對界面控件輸入情況進行循環(huán)驗證判斷。
本文系統(tǒng)中實現(xiàn)的通用輸入驗證運行后的效果見圖5。
圖5 輸入驗證運行界面效果
可以看出,在點擊保存時,在通用驗證函數(shù)的支持下,對必須輸入的控件都進行了判斷,并給出了友好的提示。
修船資源管理系統(tǒng)對企業(yè)業(yè)務(wù)的整合和數(shù)據(jù)的集成程度是評價其成功與否的重要指標,而能否在實施后具有良好的可擴展性是保證系統(tǒng)是否具有持久應(yīng)用力和推廣應(yīng)用性的關(guān)鍵。本文針對修船企業(yè)普遍性的業(yè)務(wù)需求,設(shè)計的系統(tǒng)擴展性架構(gòu)已經(jīng)在某企業(yè)成功應(yīng)用,通過系統(tǒng)提供的二次開發(fā)工具平臺,在該擴展架構(gòu)的支持下,能夠由企業(yè)用戶對軟件系統(tǒng)功能進行修改和擴充,極大的提升了企業(yè)用戶應(yīng)用的靈活性,能更快捷的響應(yīng)用戶需求的變更,并具有很好的推廣應(yīng)用性。
[1] 金 勇,韓博志.船舶修理工程信息化的關(guān)鍵技術(shù)研究[J].中國修船,2010,23(4):5-8.
[2] 姚玉南.船舶信息管理系統(tǒng)開發(fā)研究[J].船海工程,2006(4):110-113.
[3] 王燦明.基于C/S結(jié)構(gòu)的船舶修理企業(yè)ERP系統(tǒng)的研發(fā)[D].武漢:武漢理工大學,2003.
[4] 姚競爭.數(shù)字化造船一體化數(shù)據(jù)平臺關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱工程大學,2011.
[5] 陳 曦,茅云生.反射技術(shù)在船廠ERP系統(tǒng)中的應(yīng)用研究[J].船海工程,2011,40(3):88-90.