MIS系統開發利器,快速的字典錄入解決方案,另類的、可管理的.NET DataWindow


一、前言

     AgileEAS.NET SOA 中間件平台是一款基於基於敏捷並行開發思想和Microsoft .Net構件(組件)開發技術而構建的一個快速開發應用平台。用於幫助中小型軟件企業建立一條適合市場快速變化的開發團隊,以達到節省開發成本、縮短開發時間,快速適應市場變化的目的。

     AgileEAS.NET SOA中間件平台提供了敏捷快速開發軟件工程的最佳實踐,通過提供大量的基礎支撐功能如IOC、ORM、SOA、分布式體系及敏捷並發開發方法所支撐的插件開發體系,以及提供了大量的實體、數據模型設計生成工具、代碼生成工具,用於幫助中小軟件開發商快速成長。

     AgileEAS.NET平台充分把握目前軟件行業快速發展的新趨勢,基於敏捷並行開發、快速適應市場這樣淳朴的軟件工程實踐,采用業界廣泛使用的Microsoft .Net構件(組件)開發技術實踐了這種開發思想,幫助軟件企業實現“敏捷變化、快速適合”的目標,從而幫助軟件企業在激烈的市場競爭中贏得先機並獲得更高的回報。

二、管理信息系統開發之中的字典選擇錄入問題

     AgileEAS.NET SOA中間件平台被廣泛的應用於MIS類系統之中,可以說基於AgileEAS.NET SOA中間件開發MIS類真是得天讀后,能大大的降低系統的開發難度和開發工作量。

     有管理信息系統開發之中有很大一部分工作是實現界面的數據選擇錄入,比如商品進銷存之中的根據輸入碼、拼音碼、檢索碼查出某部分字典數據並且選擇錄入,如下圖:

8VRYWG4DG$MWH{M`71%_4KI

     這是一個典型的字典選擇輸入應用,此類應用大量應用於比如像采購入庫、采購申請之中的選擇要采購的商品信息,商品信息存儲在商品字典,本案例是選擇葯品字典信息,選擇錄入葯品字典信息以便於進行葯品入庫業務處理。

     在傳統的此類應用開發過程之中我們需要自己處理當輸入焦點在檢索文本框之中進行輸入的輸入事件以及大量的界面、數據檢索處理工具,費時費力,如果一個界面之中多出這樣幾個此類的應用場景,那么這個插件的代碼的70%或者以上都用於應對此類場景,就形成了一種代碼超長、界面控件、輸入控件的事件處理麻煩的境界,如以下這個界面:

MKX1O%C{HK2W$DR8(2~(UEG

     這個界面之中有五處此類場景的應用,當然,在一些應用之中可能有十個或者更多的這種場景,整個模塊在應對此類情況的代碼極其之中,也會慢慢的導致代碼的可讀性,可維護性越來越差。

三、TextBoxAutoComplete組件

     AgileEAS.NET SOA中間件平台在經過多年痛苦的開發應用之中,從各種客戶的反饋和開發應用的經驗之中積累了一套解決此問題的方案,並創造性的實現了一個基於輸入文本框的擴展解決方案,TextBoxAutoComplete組件及其之后的InputDict(輸入字典)管理體系。

     TextBoxAutoComplete組件:根據其名稱我們可以簡單的理解為TextBox的自動完成組件,那么其功能就是類似於baidu、google的搜索文本框功能:

image_thumb[2]

     TextBox控件配合TextBoxAutoComplete完成類似上圖你的自動完成檢索功能,只不過baidu、google的搜索文本框展示的是搜搜索關鍵字,而AgileEAS.NET SOA中間件平台之中的TextBoxAutoComplete展現的是各種字典的錄入選擇表格,如下圖:

S]%CR3G$`3[)_U8$XIW5Q5E_thumb[2]

     TextBox控件配合TextBoxAutoComplete可以完成對任意類型的字典信息的檢索錄入和自動完成功能。

四、輸入字典管理

     如果說要實現對任意類型的字典信息的檢索錄入和自動完成功能,僅TextBoxAutoComplete組件是不夠的,為什么呢, 這會涉及到各類輸入字典的錄入數據規則、檢索規則、數據窗口(DataWindow)的數據顯示、排序規則、以及對數據源的過濾規則等等。

     那么如何解決此問題呢,AgileEAS.NET SOA中間件平台提供了一個字典管理功能“輸入字典”:

%ZBRF}{9}{TNOV$YJH)EZUF

     系統中維護着一組用於控制TextBoxAutoComplete組件的數據檢索、顯示的各項參數,其中包括如下重要信息:

     字典編碼:字典編碼是一個Guid類型的值,其值必須是唯一的,也早用於控制TextBoxAutoComplete進行重要的重要依據,也是維系TextBox控件與TextBoxAutoComplete的唯一紐帶。

     數據類型:TextBoxAutoComplete組件工作是所依賴的AgileEAS.NET SOA中間件ORM實體對象類型,即輸入字典的數據檢索、顯示必須依賴於ORM實體對象。

     顯示參數:數據窗口(DataWindow)的寬度、高度和每次可顯示的記錄行數。

     是否啟用緩存:即輸入字典的檢索行為是基於數據緩存進行的還是基於數據庫檢索進行的,因為我們的處理很多不常見化的字典信息,比如民族、省份這樣的信息不會經常發生變化,AgileEAS.NET SOA中間件平台設計一套基於時間戳的實體緩存體系,如果選擇啟去緩存,只自動完成的檢索不會請求數據庫操作,以減少通信和數據庫原因,如果選擇啟用了緩存,則必須要設定緩存屬性。

     緩存屬性:用於控件緩存的增量更新的一個日期時間型字段/實體數據,並且必須在ORM實體的這個屬性上面加上CacheUpdated標記:

   1: /// <;summary>
   2: /// 最后更新時間 。
   3: /// <;/summary>
   4: [Column("LMTime", "最后更新時間"),CacheUpdated]
   5: [DisplayName("最后更新時間")]
   6: public DateTime LMTime
   7: {
   8:     get;
   9:     set;
  10: }

     並且需要在對就的字典管理/維護程序這中,當增加、修改某一行字典記錄之后需要把對應的字段時間更新為最新的修改時間,那么緩存系統就會在一定的延遲規則之后獲得這一更新記錄。

     顯示屬性:當TextBoxAutoComplete組件完成選擇錄入之后,顯示在關聯文本框內的值對應的ORM屬性。

     緩存間隔:輸入字典記錄本身的緩存間隔,即TextBoxAutoComplete引擎從數據庫中更新對應的字典定義的周期,最小為0分鍾,即TextBoxAutoComplete直接讀取數據庫中的字典記錄。

     碼值屬性:當TextBoxAutoComplete組件完成選擇錄入之后,用於執行其他業務的字典編碼屬性,一般情況下為字典的主鍵屬性。

     顯示設置:用於設置DataWindow(數據窗口)之中顯示的列信息記錄,包括顯示那些列、列標題、顯示順序等:

VNEVZP7)RKC9QQK3IF(TDD9

     數據源篩選:在數據根據輸入的條件檢索之前的數據篩選功能:

4Q[9D(8)JB)W{9W58X9]TSD

     上圖的篩選條件表示僅選擇Icd10bksn值為“B”的記錄。

     搜索條件:用於定制TextBoxAutoComplete組件在經過篩選之后的數據源上的檢索行為,例如本文第二張圖上的輸入的“ys”之后的數據源檢索行為:

P1}44F6OKMP4N8WB5I9UMHD

     目前倒提供基於字符串字段的三種檢索條件:StartsWith(like ‘ys%’)、EndsWith(like ‘%ys’)和Contains(like ‘%ys%’),基本上能滿足99的應用。

五、開發過程

     首先我們要有規划,定將好數據實體、在必須的實體上定將好緩存更新標記,最新版本的ORM設計器提供了支持,我們就以DrugShop案例之中的葯品字典實體以及在葯品入庫的錄入檢索為例進行說明。

     葯品字典我們考慮使用緩存,即把葯品字典緩存在本地,以減少對服務器的請求和通信壓力,以下是葯品字典人的定義:

L0L]$68KYT]%Z}]V}H(((QF

     其中LMTime為最后更新時間,用於控制緩存的增量更新。

     當然需要注意的是,並不是所有的輸入字典信息都需要從緩存之中讀取,對於實時可變的錄入信息,如高品庫存信息必須要進行實時讀取,就沒有必要使用緩存,因為對於這些實時數據,實體緩存的准確率非常之低。

     設計好ORM實體模型並且生成代碼、編譯實體程序集之后,我們使用AgileEAS.NET平台的輸入字典創建一個新的輸入字典:

BP46DY86VN}Y7WB58UK6G7Q

 

     打上啟用緩存復選框、選擇設置緩存屬性、碼值屬性、顯示屬性如下:

FFHVM~1A2NMT8SO_WNT5UUW

     選擇顯示屬性如下:

9H0~T84O_FL7ZPQUIAX{F_1

 

     設置搜索條件如下:

5FK~YB5MTAMBXDXI_[2{RM7

     復制下字典的編碼,並且保存這個字典設置,接下來我們使用VS打開程序,在葯品入庫功能之中使用剛才定義好的字典,首頁我們概引用平台的EAS.Data.Controls.dll程序集,並且在工具欄之中添加選擇項=》選擇EAS.Data.Controls.dll程序集,確保把TextBoxAutoComplete組件加載到工具箱之中:

@(@XE0KL2NQ4S6_D03F4)QM

     然后我們像界面拖入TextBoxAutoComplete組件,完成后如下:

(@V]WTD4_3WGJ[$9UUAGJQG

     然后我們設計檢索文本框txtSeach的屬性如下:

image

     這地方最重要的就是設計TextBox基於TextBoxAutoComplete1組件擴展出來的屬性MetadateID,即擴展錄入元數據ID,關聯自我們定義好的輸入字典。

     是不是很簡單,定義一個輸入字典,程序代碼之中只需要拖入一個組件,設計一個ID,即完成了需要大量編碼才能完成的工具,名至實歸的快速開發利器。

六、執行驗證

     我們編譯並且啟動DrugShop.Main.exe,使用0001密碼sa登錄,打開葯品入庫功能,來試一下是否能夠執行自動完成:

20EU]3S`KZ53V@G8[_4(U_6

     OK,使用正常,沒有任何問題。

     DrugShop案例之中同步提供了本例子的字典定義和使用代碼,請大家通過AgileEAS.NET SOA中間件官方網站最新下載欄目進行下載。

七、聯系我們

     為完善、改進和推廣AgileEAS.NET而成立了敏捷軟件工程實驗室,是一家研究、推廣和發展新技術,並致力於提供具有自主知識產權的業務基礎平台軟件,以及基於業務基礎平台開發的管理軟件的專業軟件提供商。主要業務是為客戶提供軟件企業研發管理解決方案、企業管理軟件開發,以及相關的技術支持,管理及技術咨詢與培訓業務。

     AgileEAS.NET SOA中間件平台自2004年秋呱呱落地一來,我就一直在逐步完善和改進,也被應用於保險、醫療、電子商務、房地產、鐵路、教育等多個應用,但一直都是以我個人在推廣,2010年因為我辭職休息,我就想到把AgileEAS.NET推向市場,讓更多的人使用。

     我的技術團隊成員都是合作多年的老朋友,因為這個平台是免費的,所以也沒有什么收入,都是由程序員的那種理想與信念堅持,在此我感謝一起奮斗的朋友。

團隊網站:http://www.agilelab.cn

AgileEAS.NET網站:http://www.agileeas.net

官方博客:http://eastjade.cnblogs.com

github:https://github.com/agilelab/eas

QQ:47920381

QQ群:113723486(AgileEAS SOA 平台)/上限1000人

199463175(AgileEAS SOA 交流)/上限1000人

212867943(AgileEAS.NET研究)/上限500人

147168308(AgileEAS.NET應用)/上限500人

172060626(深度AgileEAS.NET平台)/上限500人

116773358(AgileEAS.NET 平台)/上限500人

125643764(AgileEAS.NET探討)/上限500人

193486983(AgileEAS.NET 平台)/上限500人

郵件:james@agilelab.cn,mail.james@qq.com,

電話:18629261335。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM