趙正德 莊 浩 侯曉宇
摘要:在OA系統(tǒng)中,每一位不同的角色都有不同的功能權(quán)限,這就需要OA系統(tǒng)在用戶登錄時通過用戶的身份加載不同的功能權(quán)限,形成動態(tài)的功能權(quán)限導(dǎo)航系統(tǒng)。ASPNET2.0提供一種Provider的模式,站點導(dǎo)航系統(tǒng)正是基于這種Provider模式的服務(wù),這樣用戶就可以借助這個功能強大而又靈活的模式構(gòu)建自己的站點導(dǎo)航系統(tǒng)。
關(guān)鍵詞:ASP.NET;siteMapProvider:自定義站點導(dǎo)航:ProviderModel
1前言
OA(Office,utomation)系統(tǒng)是廣大企事業(yè)單位信息化建設(shè)過程必然要經(jīng)過的里程碑。在ASP.NET 2.0中有三個高度封裝的導(dǎo)航控件:SiteMapPath,Menu、TreeView,其中Menu和TreeView可以綁定到一個XML文件或者站點地圖(SiteeMapDataSouroe)的數(shù)據(jù)源上實現(xiàn)導(dǎo)航。然而可以發(fā)現(xiàn),這樣的數(shù)據(jù)綁定實現(xiàn)的導(dǎo)航是靜態(tài)的,為實現(xiàn)動態(tài)的功能菜單導(dǎo)航系統(tǒng),就需要在OA系統(tǒng)中為每一個不同的角色綁定一個XML功能權(quán)限的導(dǎo)航文件,而且每次對其功能權(quán)限的管理都必須對XML文件進行讀寫,十分不靈活。
2自定義站點導(dǎo)航地圖
2.1 ASP NET 2.0 ProviderModel
在ASP.NET 2.0中。大量地采用了Provider Model(圖一),所謂Provider Model就是在服務(wù)和數(shù)據(jù)源之間提供一個統(tǒng)一的接口,使用戶可以使用多種數(shù)據(jù)源,并且可以動態(tài)地在各個數(shù)據(jù)源之間切換的一種模式。
Provider Model極大地增加了程序的靈活性以及可擴展性。使用戶定制自己的站點導(dǎo)航地圖成為可能。圖二顯示了站點導(dǎo)航的Provider Model。
在ASP.NET中,命名空間System,Configuration,Provider中有一個名為ProvideBase的類,它是所有ProviderS的父類;其美于導(dǎo)航系統(tǒng)的子類SiteMapProvider是所有siteMap-Providers的父類。在ASP,NET中唯一發(fā)行的站點導(dǎo)航默認SiteMapProvider是XmlSiteMap—Provider,它能從站點地圖文件(即后綴名為sitemap的xml文件)產(chǎn)生站點導(dǎo)航樹。XmL—SiteMapProvider繼承于StaticSiteMapProvider類,StatieSiteMapProvider類實現(xiàn)了SiteMap-Provider類的部分方法,所以當用戶自定義站點提供程序時,一般選擇從Static-SiteMapProvider類派生。
2.2基于Provider模式實現(xiàn)站點提供SqISiteMapProvide
下面我們就可以根據(jù)以上的原理完成SqlSiteMapProvider類。它是基于訪問數(shù)據(jù)庫的站點導(dǎo)航提供程序,即站點導(dǎo)航的信息可以存儲在數(shù)據(jù)庫中。如SQL Sever2000,一旦導(dǎo)航信息發(fā)生變化,只要通過SQL語句對數(shù)據(jù)庫中表進行編輯,十分方便靈活。由于SqlSiteMapProvider繼承于StaticSiteMapProvider類,它至少實現(xiàn)以下三個方法:
(1)lnitialize()方法,該方法在調(diào)用基類的InitiaJize()方法后執(zhí)行自己的一些初始化信息,如初始化連接字符串,設(shè)置默認的Provider等。
(2)BuildSiteMap()方法,該方法是整個SqlSlteMapProvide類的核心,它主要負責從數(shù)據(jù)庫中讀取站點導(dǎo)航信息,并且在內(nèi)存中構(gòu)建站點地圖。在該方法中,主要是建立數(shù)據(jù)庫連接,讀取節(jié)點信息并且創(chuàng)建SiteMapNode節(jié)點。
(3)GetRootNodeCore():返回目前由當前提供程序管理的所有節(jié)點的根節(jié)點。
3結(jié)束語
本文主要討論了在ASPNET中如何創(chuàng)建自定義站點地圖,在實際運用中如果站點導(dǎo)航信息保存在一個非XML文件中。如數(shù)據(jù)庫中,或者需要一個動態(tài)的站點導(dǎo)航結(jié)構(gòu),該結(jié)構(gòu)如果需要在運行時構(gòu)造可采用本文所述的方法。限于篇幅本文只是簡要地做了介紹,具體實現(xiàn)過程中,開發(fā)者可以參考MSDN技術(shù)資源庫進行開發(fā)。