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