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