可重用MIS用戶接口模塊的設(shè)計
摘 要:通過對MIS通用功能的分析,采用面向?qū)ο蟮睦^承機制構(gòu)造窗口和菜單的整體框架,其中,對數(shù)據(jù)提交時校驗結(jié)果的中文提示方法、打印預(yù)覽、用戶定制查詢等進行了比較詳細的研究。有效地解決了界面設(shè)計中統(tǒng)一性和特殊需要之間的矛盾。
關(guān)鍵詞:用戶界面;管理信息系統(tǒng);面向?qū)ο?;可重?!--關(guān)鍵CH(結(jié)束)←-->
界面是系統(tǒng)提供給用戶的第一感覺,不同開發(fā)者制作的界面風(fēng)格有很大的差異,同一人在不同時間也具有隨意性。因此,無論個人獨自開發(fā)系統(tǒng)還是團隊作業(yè),都要對界面進行整體的規(guī)劃。
制作統(tǒng)一界面的一般方法是具體而強行的規(guī)定,本文依據(jù)PB開發(fā)的經(jīng)驗,實現(xiàn)了MIS系統(tǒng)中窗口和菜單的整體繼承框架,并對其中數(shù)據(jù)校驗結(jié)果的中文提示方法、打印預(yù)覽、用戶定制查詢和數(shù)據(jù)窗口的重復(fù)使用技術(shù)等進行了比較詳細的研究,有效地解決了界面設(shè)計中統(tǒng)一性和特殊需要之間的矛盾。
此框架定義的祖先窗口獨立于特定系統(tǒng),可以為不同系統(tǒng)所使用而不用做任何修改,極大地提高了系統(tǒng)的開發(fā)效率和健壯性。
1 統(tǒng)一功能的提取
MIS系統(tǒng)需要實現(xiàn)大量的基本功能,如插入、提交、翻頁等,從權(quán)限控制的角度,有讀權(quán)限、寫權(quán)限和部分寫權(quán)限之分,體現(xiàn)在MIS系統(tǒng)設(shè)計中,就是查詢權(quán)限和錄入權(quán)限的區(qū)別。常用的操縱數(shù)據(jù)的命令如表1所示。
從中不難看出,有些命令適用于查詢,而另一些則適用于錄入。為此,可將窗口分為2個類型:一種具有數(shù)據(jù)錄入的功能,而另外一種只是查詢而已。用于錄入的窗口中可以設(shè)置與錄入所需功能命令相對應(yīng)的菜單項和工具條,用于查詢的窗口可攜帶適合查詢操作的菜單項和工具條。
工具條顯示在屏幕的上方,依據(jù)以上分析,完成編輯錄入功能的窗口所帶的菜單中可含15個工具按鈕,如圖1所示。
其功能從左到右依次為:
排序、通用查詢、打印、打印預(yù)覽、導(dǎo)入、導(dǎo)出、檢索、新增、刪除、首記錄、前移、后移、末記錄、提交、關(guān)閉。
查詢所對應(yīng)的功能為:通用查詢、打印、打印預(yù)覽、導(dǎo)出、首記錄、前移、后移、末記錄、日期段輸入、日期輸入、關(guān)閉;其圖形外觀與上面的編輯工具條類似,此處略去。
2 實現(xiàn)
在窗口上定義一個DataWindows控件dw_1,在窗口原有事件的基礎(chǔ)上定義表1所示的用戶自定義事件來操縱dw_1中的數(shù)據(jù)對象。具體的數(shù)據(jù)對象在窗口打開時指定。
在窗口所掛的菜單中設(shè)置觸發(fā)窗口自定義事件所需的子菜單和腳本,并給這些子菜單設(shè)置相應(yīng)的工具條圖標(biāo)。
下面的程序段是窗口所掛排序菜單的對應(yīng)腳本,當(dāng)圖1所示最左邊的排序按鈕被觸發(fā)時運行。
工具條上的其他按鈕不需要設(shè)置彈起和按下狀態(tài),只需要一條觸發(fā)語句就夠了。系統(tǒng)運行時,用戶通過點擊工具條上的按鈕完成對應(yīng)菜單項腳本的執(zhí)行,菜單項中的腳本進一步觸發(fā)承載此菜單的窗口中的用戶子定義事件的執(zhí)行。
對一些簡單的輸入、查詢操作,以上事件的定義和工具條的設(shè)置基本上滿足了應(yīng)用要求。大多數(shù)窗口中的數(shù)據(jù)操作圍繞一個DataWindows進行,增加的DataWindows僅用于限制和過濾該中心DataWindows,因此,雖涉及多個DataWindows或其他相關(guān)控件,除操作更復(fù)雜些外,此基本功能設(shè)置也足于解決問題。當(dāng)窗口上有多個DataWindows的數(shù)據(jù)需要維護時,可覆蓋祖先事件的腳本,并擴展祖先腳本使其符合新的功能要求。
3 利用繼承機制實現(xiàn)通用功能的一致性
由于以上窗口實現(xiàn)的基本功能在系統(tǒng)中普遍存在,為了減少編程量,提高窗口界面的一致性,可用上面介紹的窗口為祖先,讓其他負責(zé)具體事務(wù)的窗口來繼承。這樣,所有通過繼承產(chǎn)生的子窗口將不再書寫類似的代碼。系統(tǒng)在初始階段集中精力編制這些通用功能,可以保證功能實現(xiàn)得更加完善。
dw_1控件中數(shù)據(jù)對象的設(shè)置在每個子孫窗口的Open事件中完成,這樣就保重了各窗口所操作的數(shù)據(jù)是不同的,dw_1控件的大小可視具體的要求進行調(diào)整。
按PB中多文檔窗口的操作要求,每一個窗口都有自己的菜單和工具條,為了使菜單保持整體的穩(wěn)定,即窗口切換時基本菜單功能保持外觀不變,將完成基本功能的模塊結(jié)構(gòu)定義為祖先菜單,通過繼承生成查詢和編輯2個子孫菜單,子孫菜單中分別附加了觸發(fā)相關(guān)窗口事件所需的菜單項、工具條和腳本。
根據(jù)窗口功能的不同,通過繼承產(chǎn)生的窗口可選擇掛2個子孫菜單之一,這樣,特定窗口需要做的只是添加工具條中沒有的功能和控件。只要統(tǒng)一定義了窗口和數(shù)據(jù)窗口的背景色以及字體的風(fēng)格、大小和顏色,即使各窗口由不同的人開發(fā)、窗口的復(fù)雜程度不同,窗口的風(fēng)格也基本一致。為保證祖先窗口的事件腳本能操縱每一個子孫窗口的數(shù)據(jù),只需在程序中將要應(yīng)用的窗口名改為代詞this即可。工具條的使用,不但簡化了窗口上控件的數(shù)目、為數(shù)據(jù)區(qū)留下了更大的顯示空間,而且保證了界面風(fēng)格的一致。
在實際操作的過程中,當(dāng)工具條預(yù)定義的功能不適合一個特定的窗口應(yīng)用時,系統(tǒng)可視具體情況對祖先腳本進行不同的覆蓋處理,例如,有些人只有修改權(quán)限而沒有插入權(quán),系統(tǒng)會給予必要的提示;有些窗口比較復(fù)雜,涉及多個DataWindows的提交,則系統(tǒng)首先覆蓋繼承來的祖先的提交事件腳本,再對提交事件進行必要的、比祖先事件更復(fù)雜的處理。如果不允許工具條中的某個功能使用,只需在Open事件中設(shè)置他的屬性為Disable即可。
為了使用戶對當(dāng)前DataWindows中的記錄總數(shù)有個總體的把握,系統(tǒng)在祖先窗口中特定義一個單行編輯器sle_1,用于提示總記錄數(shù)和當(dāng)前記錄數(shù)。此功能的設(shè)置對FREE界面格式的DataWindows用戶尤其有用。實現(xiàn)方法是,在DataWindows的
4 錯誤俘獲及例外處理
對于錯誤的命令和輸入要提供反饋信息,給出正確用法。這一功能雖然不體現(xiàn)在工具條中,但具有通用性,必須由祖先窗口來實現(xiàn)??梢苑@的例外很多,但MIS涉及的主要是數(shù)據(jù)庫錯誤,窗口上的其他控件的錯誤可在程序調(diào)試時糾正。
在數(shù)據(jù)提交時,DBMS要進行數(shù)據(jù)完整性的檢驗,常出現(xiàn)的錯誤有:非空字段沒有輸入值,這時,PB將提示一段出錯信息。遺憾的是,該信息以英文方式顯示,用戶出錯是難免的,怎么用中文實現(xiàn)出錯提示呢?
假如我們在DataWindows中需錄入xqrq(需求日期),該字段由非null約束,若DataWindows控件的Dberror事件中無腳本,而用戶又忘記了錄入此項數(shù)據(jù),則提交數(shù)據(jù)時系統(tǒng)將以英文顯示出錯信息:
第一句指出出錯的位置,最后一句為一般性說明。
當(dāng)然,數(shù)據(jù)提交前可以用程序?qū)λ袃?nèi)容進行驗證,但這種解決辦法看似簡單,實現(xiàn)是很麻煩的,需要逐行對各字段可能的錯誤進行分析。實際上,當(dāng)提交失敗時,DataWindows控件的Dberror事件首先被觸發(fā),并傳遞5個參數(shù),分別為:
sqldbcode(錯誤代碼),sqlerrtext(錯誤提示),sqlsyntax(出錯的語句),buffer(),row(出錯行號)。
因此,可采用以下解決途徑:
在DataWindows控件的Dberror事件中寫腳本:
gf_dbms_error(dw_1,sqldbcode,sqlerrtext,sqlsyntax,row)
其中g(shù)f_dbms_error為自定義的專門處理數(shù)據(jù)庫出錯信息的全局函數(shù),其基本思路是:根據(jù)sqldbcode確定錯誤類型,然后從sqlerrtext提示信息中分解出字段名等信息段,根據(jù)不同的錯誤類型,重新組合并顯示在顯示器上。當(dāng)然,若字段名為英文字母,還需將字段名轉(zhuǎn)換為注釋(一般為中文)。
例如:針對以上提交所碰到的問題,系統(tǒng)提示如圖2所示。
5 打印預(yù)覽的實現(xiàn)技術(shù)
打印預(yù)覽是Windows應(yīng)用提供給用戶自主進行打印界面設(shè)置的一個接口,實現(xiàn)的基本原理是系統(tǒng)根據(jù)用戶需求對需預(yù)覽的DataWindows的各項默認(rèn)參數(shù)進行修改,由于打印預(yù)覽結(jié)束后系統(tǒng)還需返回到原狀態(tài),為此,系統(tǒng)不能對原DataWindows進行直接操作,又由于此功能的普遍使用性,在實現(xiàn)上系統(tǒng)將此功能安排在祖先窗口上,由各菜單來觸發(fā)該功能的執(zhí)行,由工具條來具體實施。
實現(xiàn)的關(guān)鍵是怎么將要打印預(yù)覽的數(shù)據(jù)傳遞給用于打印預(yù)覽的子程序,解決此問題的方法一般有兩種:
(1)將需打印的DataWindows中的數(shù)據(jù)對象賦予打印預(yù)覽窗口中的DataWindows控件的數(shù)據(jù)對象,將需打印的DataWindows控件中的數(shù)據(jù)復(fù)制到Windows的剪貼板,再從剪貼板上將數(shù)據(jù)復(fù)制到打印預(yù)覽窗口中的DataWindows控件中,最后完成對窗口中各項參數(shù)的設(shè)定。
許多論文中提供了這種方法的實現(xiàn),PB自帶的一個示例也是這個原理。但應(yīng)用中存在以下2個主要的缺陷:
首先,若需預(yù)覽的DataWindows中帶有下拉子DataWindows,則下拉子DataWindows無法實現(xiàn)自動轉(zhuǎn)換,即顯示出來的是內(nèi)部存儲值而不是用戶應(yīng)該看到的顯示值,因為拷貝過去的是內(nèi)部存儲值,從而讓用戶感到莫名其妙。為解決此問題,需重新構(gòu)造各帶下拉子DataWindows的DataWindows的表的關(guān)聯(lián)關(guān)系,涉及到DataWindows中的所有子DataWindows,實現(xiàn)起來工作量和難度均較大,也失去了這一下拉子46DataWindows工具帶來的設(shè)計便利;第二個問題是復(fù)合報表無法實現(xiàn)預(yù)覽,復(fù)合報表是一個將多個DataWindows合成為一個DataWindows的技術(shù)。因此,此方法并不是一個實用的實現(xiàn),只能用于最簡單的場合。
?。?)設(shè)置一個全局的DataWindows控件變量,讓該DataWindows變量共享要進行打印預(yù)覽的DataWindows控件,然后對該全局的DataWindows控件變量進行用戶定制設(shè)置,則以上問題全部解決。圖3是此思路的具體實現(xiàn),數(shù)據(jù)窗口上面一行的控制命令分別為:大小縮放、頁碼、上邊距、左邊距、下邊距、右邊距的直接輸入和點擊按鈕式輸入,最右邊提供的是標(biāo)尺的選擇。該窗口自帶菜單和工具條,不受繼承機制的限制,工具條中提供了打印等按鈕。
6 通用查詢技術(shù)
對常用的查詢,我們可逐一定制,但定制的查詢?nèi)狈`活性,考慮到定制的查詢并不能完全滿足用戶的實際需要,為此系統(tǒng)可定義通用查詢,并將他列入工具條中,以便隨時訪問,以適應(yīng)特殊的需求。
實現(xiàn)技術(shù):從數(shù)據(jù)庫的系統(tǒng)表中提取表名、顯示所需的字段名,以及用于構(gòu)造邏輯關(guān)系的字段名;構(gòu)造查詢所需的邏輯表達式,并按此邏輯關(guān)系檢索數(shù)據(jù),確認(rèn)后可調(diào)用打印預(yù)覽來顯示。由于有些數(shù)據(jù)庫不支持漢字表名和字段名,使得表名和字段名需用英文字符書寫,為此真正使用的應(yīng)該是表和字段的注釋。實現(xiàn)的另一個關(guān)鍵問題是動態(tài)SQL的構(gòu)造,比較復(fù)雜,在此不一一敘述,具體結(jié)果如圖4所示,圖3中顯示的預(yù)覽結(jié)果就是由此方法構(gòu)造。
通用查詢雖然提高了系統(tǒng)的靈活性,但操作起來比較復(fù)雜,尤其是構(gòu)造復(fù)雜邏輯表達式需要專門知識,且用戶必須非常熟悉數(shù)據(jù)庫的結(jié)構(gòu)。以上實現(xiàn)只能進行單表查詢,因此,僅做輔助性使用。
7 結(jié) 語
本文提供的窗口和菜單繼承機制保證了用戶界面的整體風(fēng)格,通過仔細地設(shè)計工具條和用戶自定義事件,使窗口功能進一步完善,所需控件數(shù)目進一步變少。當(dāng)然,要實現(xiàn)一致的用戶界面,開發(fā)者還必須進行相應(yīng)的統(tǒng)一規(guī)定,如字體風(fēng)格和顏色的統(tǒng)一設(shè)定、顯示分辨率設(shè)定等等。在項目開發(fā)的早期還需定義編輯格式以規(guī)范共用的數(shù)據(jù)字典、定義顯示格式以控制用戶數(shù)據(jù)的顯示方式,從每一個細節(jié)上來保證系統(tǒng)風(fēng)格的一致。
另外,以上實現(xiàn)的通用界面的祖先窗口可以被所有MIS所使用。
參考文獻
[1]http://www.sybase.com/products/power builder/index.html
[2]http://lin2000.myrice.com/
[3]曉通網(wǎng)絡(luò)數(shù)據(jù)庫研究所.PowerBuilder 6.0/6.5開發(fā)與參考手冊[M].呼和浩特:內(nèi)蒙古人民出版社,1999.
評論