天天看點

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

一、前言

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

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

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

     AgileEAS.NET平台充分把握目前軟體行業快速發展的新趨勢,基于靈活并行開發、快速适應市場這樣淳樸的軟體工程實踐,采用業界廣泛使用的Microsoft .Net構件(元件)開發技術實踐了這種開發思想,幫助軟體企業實作“靈活變化、快速适合”的目标,進而幫助軟體企業在激烈的市場競争中赢得先機并獲得更高的回報。

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

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

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

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

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

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

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

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

三、TextBoxAutoComplete元件

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

     TextBoxAutoComplete元件:根據其名稱我們可以簡單的了解為TextBox的自動完成元件,那麼其功能就是類似于baidu、google的搜尋文本框功能:

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

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

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

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

四、輸入字典管理

     如果說要實作對任意類型的字典資訊的檢索錄入和自動完成功能,僅TextBoxAutoComplete元件是不夠的,為什麼呢, 這會涉及到各類輸入字典的錄入資料規則、檢索規則、資料視窗(DataWindow)的資料顯示、排序規則、以及對資料源的過濾規則等等。

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

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

     系統中維護着一組用于控制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(資料視窗)之中顯示的列資訊記錄,包括顯示那些列、列标題、顯示順序等:

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

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

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

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

     搜尋條件:用于定制TextBoxAutoComplete元件在經過篩選之後的資料源上的檢索行為,例如本文第二張圖上的輸入的“ys”之後的資料源檢索行為:

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

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

五、開發過程

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

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

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

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

     當然需要注意的是,并不是所有的輸入字典資訊都需要從緩存之中讀取,對于實時可變的錄入資訊,如高品庫存資訊必須要進行實時讀取,就沒有必要使用緩存,因為對于這些實時資料,實體緩存的準确率非常之低。

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

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

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

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

     選擇顯示屬性如下:

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

     設定搜尋條件如下:

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

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

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

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

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

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

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

     這地方最重要的就是設計TextBox基于TextBoxAutoComplete1元件擴充出來的屬性MetadateID,即擴充錄入中繼資料ID,關聯自我們定義好的輸入字典。

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

六、執行驗證

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

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

     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人

郵件:[email protected],[email protected],

電話:18629261335。

作者:魏瓊東

出處:http://www.cnblogs.com/eastjade

關于作者:有13年的軟體從業經曆,專注于中小軟體企業軟體開發過程研究,通過在技術與管理幫助中小軟體企業實作技術層面開源節流的目的。熟悉需求分析、企業架構、項目管理。現主要從事基于AgileEAS.NET平台的技術咨詢工作,主要服務于醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。如有問題或建議,請多多賜教!

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,如有問題,可以通過[email protected] 聯系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨論,非常感謝。

繼續閱讀