<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 可重用MIS用戶(hù)接口模塊的設計

可重用MIS用戶(hù)接口模塊的設計

作者: 時(shí)間:2006-08-25 來(lái)源:網(wǎng)絡(luò ) 收藏

 :通過(guò)對通用功能的分析,采用面向對象的繼承機制構造窗口和菜單的整體框架,其中,對數據提交時(shí)校驗結果的中文提示方法、打印預覽、用戶(hù)定制查詢(xún)等進(jìn)行了比較詳細的研究。有效地解決了界面設計中統一性和特殊需要之間的矛盾。
關(guān)鍵詞:用戶(hù)界面;管理信息系統;面向對象;可重用

  界面是系統提供給用戶(hù)的第一感覺(jué),不同開(kāi)發(fā)者制作的界面風(fēng)格有很大的差異,同一人在不同時(shí)間也具有隨意性。因此,無(wú)論個(gè)人獨自開(kāi)發(fā)系統還是團隊作業(yè),都要對界面進(jìn)行整體的規劃。

  制作統一界面的一般方法是具體而強行的規定,本文依據PB開(kāi)發(fā)的經(jīng)驗,實(shí)現了系統中窗口和菜單的整體繼承框架,并對其中數據校驗結果的中文提示方法、打印預覽、用戶(hù)定制查詢(xún)和數據窗口的重復使用技術(shù)等進(jìn)行了比較詳細的研究,有效地解決了界面設計中統一性和特殊需要之間的矛盾。

  此框架定義的祖先窗口獨立于特定系統,可以為不同系統所使用而不用做任何修改,極大地提高了系統的開(kāi)發(fā)效率和健壯性。

1 統一功能的提取
  系統需要實(shí)現大量的基本功能,如插入、提交、翻頁(yè)等,從權限控制的角度,有讀權限、寫(xiě)權限和部分寫(xiě)權限之分,體現在MIS系統設計中,就是查詢(xún)權限和錄入權限的區別。常用的操縱數據的命令如表1所示。

  從中不難看出,有些命令適用于查詢(xún),而另一些則適用于錄入。為此,可將窗口分為2個(gè)類(lèi)型:一種具有數據錄入的功能,而另外一種只是查詢(xún)而已。用于錄入的窗口中可以設置與錄入所需功能命令相對應的菜單項和工具條,用于查詢(xún)的窗口可攜帶適合查詢(xún)操作的菜單項和工具條。

  工具條顯示在屏幕的上方,依據以上分析,完成編輯錄入功能的窗口所帶的菜單中可含15個(gè)工具按鈕,如圖1所示。

其功能從左到右依次為:
  排序、通用查詢(xún)、打印、打印預覽、導入、導出、檢索、新增、刪除、首記錄、前移、后移、末記錄、提交、關(guān)閉。
  查詢(xún)所對應的功能為:通用查詢(xún)、打印、打印預覽、導出、首記錄、前移、后移、末記錄、日期段輸入、日期輸入、關(guān)閉;其圖形外觀(guān)與上面的編輯工具條類(lèi)似,此處略去。

2 實(shí)現

  在窗口上定義一個(gè)DataWindows控件dw_1,在窗口原有事件的基礎上定義表1所示的用戶(hù)自定義事件來(lái)操縱dw_1中的數據對象。具體的數據對象在窗口打開(kāi)時(shí)指定。

  在窗口所掛的菜單中設置觸發(fā)窗口自定義事件所需的子菜單和腳本,并給這些子菜單設置相應的工具條圖標。

  下面的程序段是窗口所掛排序菜單的對應腳本,當圖1所示最左邊的排序按鈕被觸發(fā)時(shí)運行。
 

  工具條上的其他按鈕不需要設置彈起和按下?tīng)顟B(tài),只需要一條觸發(fā)語(yǔ)句就夠了。系統運行時(shí),用戶(hù)通過(guò)點(diǎn)擊工具條上的按鈕完成對應菜單項腳本的執行,菜單項中的腳本進(jìn)一步觸發(fā)承載此菜單的窗口中的用戶(hù)子定義事件的執行。

  對一些簡(jiǎn)單的輸入、查詢(xún)操作,以上事件的定義和工具條的設置基本上滿(mǎn)足了應用要求。大多數窗口中的數據操作圍繞一個(gè)DataWindows進(jìn)行,增加的DataWindows僅用于限制和過(guò)濾該中心DataWindows,因此,雖涉及多個(gè)DataWindows或其他相關(guān)控件,除操作更復雜些外,此基本功能設置也足于解決問(wèn)題。當窗口上有多個(gè)DataWindows的數據需要維護時(shí),可覆蓋祖先事件的腳本,并擴展祖先腳本使其符合新的功能要求。


3 利用繼承機制實(shí)現通用功能的一致性
  由于以上窗口實(shí)現的基本功能在系統中普遍存在,為了減少編程量,提高窗口界面的一致性,可用上面介紹的窗口為祖先,讓其他負責具體事務(wù)的窗口來(lái)繼承。這樣,所有通過(guò)繼承產(chǎn)生的子窗口將不再書(shū)寫(xiě)類(lèi)似的代碼。系統在初始階段集中精力編制這些通用功能,可以保證功能實(shí)現得更加完善。

  dw_1控件中數據對象的設置在每個(gè)子孫窗口的Open事件中完成,這樣就保重了各窗口所操作的數據是不同的,dw_1控件的大小可視具體的要求進(jìn)行調整。

  按PB中多文檔窗口的操作要求,每一個(gè)窗口都有自己的菜單和工具條,為了使菜單保持整體的穩定,即窗口切換時(shí)基本菜單功能保持外觀(guān)不變,將完成基本功能的模塊結構定義為祖先菜單,通過(guò)繼承生成查詢(xún)和編輯2個(gè)子孫菜單,子孫菜單中分別附加了觸發(fā)相關(guān)窗口事件所需的菜單項、工具條和腳本。

  根據窗口功能的不同,通過(guò)繼承產(chǎn)生的窗口可選擇掛2個(gè)子孫菜單之一,這樣,特定窗口需要做的只是添加工具條中沒(méi)有的功能和控件。只要統一定義了窗口和數據窗口的背景色以及字體的風(fēng)格、大小和顏色,即使各窗口由不同的人開(kāi)發(fā)、窗口的復雜程度不同,窗口的風(fēng)格也基本一致。為保證祖先窗口的事件腳本能操縱每一個(gè)子孫窗口的數據,只需在程序中將要應用的窗口名改為代詞this即可。工具條的使用,不但簡(jiǎn)化了窗口上控件的數目、為數據區留下了更大的顯示空間,而且保證了界面風(fēng)格的一致。

  在實(shí)際操作的過(guò)程中,當工具條預定義的功能不適合一個(gè)特定的窗口應用時(shí),系統可視具體情況對祖先腳本進(jìn)行不同的覆蓋處理,例如,有些人只有修改權限而沒(méi)有插入權,系統會(huì )給予必要的提示;有些窗口比較復雜,涉及多個(gè)DataWindows的提交,則系統首先覆蓋繼承來(lái)的祖先的提交事件腳本,再對提交事件進(jìn)行必要的、比祖先事件更復雜的處理。如果不允許工具條中的某個(gè)功能使用,只需在Open事件中設置他的屬性為Disable即可。

  為了使用戶(hù)對當前DataWindows中的記錄總數有個(gè)總體的把握,系統在祖先窗口中特定義一個(gè)單行編輯器sle_1,用于提示總記錄數和當前記錄數。此功能的設置對FREE界面格式的DataWindows用戶(hù)尤其有用。實(shí)現方法是,在DataWindows的
 

4 錯誤俘獲及例外處理
  對于錯誤的命令和輸入要提供反饋信息,給出正確用法。這一功能雖然不體現在工具條中,但具有通用性,必須由祖先窗口來(lái)實(shí)現??梢苑@的例外很多,但MIS涉及的主要是數據庫錯誤,窗口上的其他控件的錯誤可在程序調試時(shí)糾正。

  在數據提交時(shí),DBMS要進(jìn)行數據完整性的檢驗,常出現的錯誤有:非空字段沒(méi)有輸入值,這時(shí),PB將提示一段出錯信息。遺憾的是,該信息以英文方式顯示,用戶(hù)出錯是難免的,怎么用中文實(shí)現出錯提示呢?

  假如我們在DataWindows中需錄入xqrq(需求日期),該字段由非null約束,若DataWindows控件的Dberror事件中無(wú)腳本,而用戶(hù)又忘記了錄入此項數據,則提交數據時(shí)系統將以英文顯示出錯信息:
 


  第一句指出出錯的位置,最后一句為一般性說(shuō)明。

  當然,數據提交前可以用程序對所有內容進(jìn)行驗證,但這種解決辦法看似簡(jiǎn)單,實(shí)現是很麻煩的,需要逐行對各字段可能的錯誤進(jìn)行分析。實(shí)際上,當提交失敗時(shí),DataWindows控件的Dberror事件首先被觸發(fā),并傳遞5個(gè)參數,分別為:

  sqldbcode(錯誤代碼),sqlerrtext(錯誤提示),sqlsyntax(出錯的語(yǔ)句),buffer(),row(出錯行號)。

  因此,可采用以下解決途徑:
  在DataWindows控件的Dberror事件中寫(xiě)腳本:
  gf_dbms_error(dw_1,sqldbcode,sqlerrtext,sqlsyntax,row)

  其中g(shù)f_dbms_error為自定義的專(zhuān)門(mén)處理數據庫出錯信息的全局函數,其基本思路是:根據sqldbcode確定錯誤類(lèi)型,然后從sqlerrtext提示信息中分解出字段名等信息段,根據不同的錯誤類(lèi)型,重新組合并顯示在顯示器上。當然,若字段名為英文字母,還需將字段名轉換為注釋?zhuān)ㄒ话銥橹形模?BR>
  例如:針對以上提交所碰到的問(wèn)題,系統提示如圖2所示。

5 打印預覽的實(shí)現技術(shù)
  打印預覽是Windows應用提供給用戶(hù)自主進(jìn)行打印界面設置的一個(gè)接口,實(shí)現的基本原理是系統根據用戶(hù)需求對需預覽的DataWindows的各項默認參數進(jìn)行修改,由于打印預覽結束后系統還需返回到原狀態(tài),為此,系統不能對原DataWindows進(jìn)行直接操作,又由于此功能的普遍使用性,在實(shí)現上系統將此功能安排在祖先窗口上,由各菜單來(lái)觸發(fā)該功能的執行,由工具條來(lái)具體實(shí)施。

  實(shí)現的關(guān)鍵是怎么將要打印預覽的數據傳遞給用于打印預覽的子程序,解決此問(wèn)題的方法一般有兩種:

 ?。?)將需打印的DataWindows中的數據對象賦予打印預覽窗口中的DataWindows控件的數據對象,將需打印的DataWindows控件中的數據復制到Windows的剪貼板,再從剪貼板上將數據復制到打印預覽窗口中的DataWindows控件中,最后完成對窗口中各項參數的設定。

  許多論文中提供了這種方法的實(shí)現,PB自帶的一個(gè)示例也是這個(gè)原理。但應用中存在以下2個(gè)主要的缺陷:

  首先,若需預覽的DataWindows中帶有下拉子DataWindows,則下拉子DataWindows無(wú)法實(shí)現自動(dòng)轉換,即顯示出來(lái)的是內部存儲值而不是用戶(hù)應該看到的顯示值,因為拷貝過(guò)去的是內部存儲值,從而讓用戶(hù)感到莫名其妙。為解決此問(wèn)題,需重新構造各帶下拉子DataWindows的DataWindows的表的關(guān)聯(lián)關(guān)系,涉及到DataWindows中的所有子DataWindows,實(shí)現起來(lái)工作量和難度均較大,也失去了這一下拉子46DataWindows工具帶來(lái)的設計便利;第二個(gè)問(wèn)題是復合報表無(wú)法實(shí)現預覽,復合報表是一個(gè)將多個(gè)DataWindows合成為一個(gè)DataWindows的技術(shù)。因此,此方法并不是一個(gè)實(shí)用的實(shí)現,只能用于最簡(jiǎn)單的場(chǎng)合。

 ?。?)設置一個(gè)全局的DataWindows控件變量,讓該DataWindows變量共享要進(jìn)行打印預覽的DataWindows控件,然后對該全局的DataWindows控件變量進(jìn)行用戶(hù)定制設置,則以上問(wèn)題全部解決。圖3是此思路的具體實(shí)現,數據窗口上面一行的控制命令分別為:大小縮放、頁(yè)碼、上邊距、左邊距、下邊距、右邊距的直接輸入和點(diǎn)擊按鈕式輸入,最右邊提供的是標尺的選擇。該窗口自帶菜單和工具條,不受繼承機制的限制,工具條中提供了打印等按鈕。

6 通用查詢(xún)技術(shù)
  對常用的查詢(xún),我們可逐一定制,但定制的查詢(xún)缺乏靈活性,考慮到定制的查詢(xún)并不能完全滿(mǎn)足用戶(hù)的實(shí)際需要,為此系統可定義通用查詢(xún),并將他列入工具條中,以便隨時(shí)訪(fǎng)問(wèn),以適應特殊的需求。

  實(shí)現技術(shù):從數據庫的系統表中提取表名、顯示所需的字段名,以及用于構造邏輯關(guān)系的字段名;構造查詢(xún)所需的邏輯表達式,并按此邏輯關(guān)系檢索數據,確認后可調用打印預覽來(lái)顯示。由于有些數據庫不支持漢字表名和字段名,使得表名和字段名需用英文字符書(shū)寫(xiě),為此真正使用的應該是表和字段的注釋。實(shí)現的另一個(gè)關(guān)鍵問(wèn)題是動(dòng)態(tài)SQL的構造,比較復雜,在此不一一敘述,具體結果如圖4所示,圖3中顯示的預覽結果就是由此方法構造。

  通用查詢(xún)雖然提高了系統的靈活性,但操作起來(lái)比較復雜,尤其是構造復雜邏輯表達式需要專(zhuān)門(mén)知識,且用戶(hù)必須非常熟悉數據庫的結構。以上實(shí)現只能進(jìn)行單表查詢(xún),因此,僅做輔助性使用。

7  語(yǔ)

  本文提供的窗口和菜單繼承機制保證了用戶(hù)界面的整體風(fēng)格,通過(guò)仔細地設計工具條和用戶(hù)自定義事件,使窗口功能進(jìn)一步完善,所需控件數目進(jìn)一步變少。當然,要實(shí)現一致的用戶(hù)界面,開(kāi)發(fā)者還必須進(jìn)行相應的統一規定,如字體風(fēng)格和顏色的統一設定、顯示分辨率設定等等。在項目開(kāi)發(fā)的早期還需定義編輯格式以規范共用的數據字典、定義顯示格式以控制用戶(hù)數據的顯示方式,從每一個(gè)細節上來(lái)保證系統風(fēng)格的一致。

  另外,以上實(shí)現的通用界面的祖先窗口可以被所有MIS所使用。

參考文獻
[1]http://www.sybase.com/products/power builder/index.html
[2]http://lin2000.myrice.com/
[3]曉通網(wǎng)絡(luò )數據庫研究所.PowerBuilder 6.0/6.5開(kāi)發(fā)與參考手冊[M].呼和浩特:內蒙古人民出版社,1999.



關(guān)鍵詞: MIS 接口模塊

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>