【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)
?
本節將會介紹SharePoint中最為常用的一些對象模型,以及如何使用這些對象模型來訪問和操作網站中的數據。幾乎所有的SharePoint服務器端開發都會涉及到這些內容,因此應著重掌握本節中所介紹的基本對象模型的使用方法。由于篇幅所限,在介紹每種對象的時候只能闡述一些最為常用和重要的屬性及方法,以及一些容易混淆或出錯的內容。更加完整的屬性、方法的定義、介紹和代碼示例片段,請參考SDK中類庫索引中相關章節。
網站中一些常用對象的結構大概如下圖所示(從SharePoint 2003起,這部分內容在結構上未曾發生根本性的變動):
??
(一)網站集(SPSite)和網站(SPWeb)
網站是SharePoint基本對象模型之一,由于SharePoint的數據基本上全部都容納在網站中,因此絕大多數的SharePoint程序都要先從獲取網站開始。
SPSite 對應的是站點集 (sitecollection),站點集只能總管理中心創建, 從某種程度上來說,也可以理解為根站點;
SPWeb對應的是站點(Site), 站點是從當前站點創建的,站點下面還可以包括站點;
如果你是學習開發,那么這段代碼是你常用的:
using(SPSite oSiteCollection = new SPSite("http://Server_Name"))
{
? ? using(SPWeb oWebsite = oSiteCollection.OpenWeb("Website_URL"))
? ? {
? ? ? ? SPList list=oWebsite.Lists["mylist"];
? ...
? ? }
}
更多的內容請參考 SDK:http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spsite.aspx
1、網站集和網站的關系
網站集(Site Collection)顧名思義,是網站的集合,每個網站集中必須有一個頂級網站(或稱為首要網站),而每個網站可以有0至多個子網站,從而構成一棵網站結構樹,在這棵樹上的所有網站構成了整個網站集。在SharePoint中,網站集幾乎只是一個被架空的概念,其作用只是將一個相對完整的整體性應用集中組織起來,控制應用中的母版頁、Web部件、網站集功能等配置。網站集這個本身不儲存任何數據,諸如Web部件、母版頁、列表模板、網站模板、網站集解決方案等均存儲在網站集的頂級網站中。在SharePoint對象模型中,網站集使用SPSite對象表示,SPSiteCollection(SPSiteCollection包含在Microsoft.SharePoint.Administration這個命名空間中,而本節涉及到的其他類均包含在Microsoft.SharePoint命名空間中)表示網站集的集合。
網站是SharePoint中最經常使用到的對象模型之一,網站中包含的列表、文檔庫、文件等內容都是在SharePoint開發過程中最經常涉及到的對象。網站使用SPWeb對象表示,SPWebCollection表示網站的集合。請注意在對象模型中“網站的集合”(SPWebCollection)與“網站集”(SPSite)這幾個概念的關系和區別。
?
2、網站集的獲取
在控制臺程序等運行在服務器上的客戶端程序中,由于沒有IIS的上下文(Context)環境,必須要通過絕對路徑獲取網站集對象,再獲得其中的網站對象。
網站集的獲取使用SPSite的構造函數進行,一般來說,經常使用的一個重載如下(假設我們的網站地址為:http://sp2010/book,一個子網站):
1: SPSite site = new SPSite("http://sp2010/book");在該構造函數中,必須要使用完整的絕對Url路徑,但該Url不一定要限制為網站的根路徑,可以為該網站下的任何一個路徑(甚至是不存在的文件地址),例如使用Url:“http://sp2010/book/chapters/part1/ch02.docx”作為參數,同樣可以返回同一個網站集,即使后面的文檔庫、文件夾或文件都不存在也沒有關系(但并不建議這樣使用)。
?
3、網站的獲取
當獲取到一個網站集的SPSite對象之后,有三種方式獲取到其中的網站:(1)RootWeb屬性;(2)AllWebs屬性;(3)OpenWeb方法。
(1)RootWeb屬性返回網站集中的根網站,即頂級網站。
(2)AllWebs屬性是SPWebCollection類型,返回網站集中的所有網站。當要獲取到其中某一個網站的時候,可以使用3種索引器:
- AllWebs[idx]:int型索引器,根據下標順序獲取,幾乎很少使用這種方式;
- AllWebs[id]:Guid型索引器,根據網站Guid獲取;
- AllWebs[url]:string型索引器,根據網站的相對路徑(相對根網站的路徑)獲取。
(3)OpenWeb方法按照參數類型不同的重載,也有如下的使用方式:
- OpenWeb():無參數。返回構造SPSite時所使用的Url所對應的網站,這是一種比較常用的方法,如果使用的是頂級網站的Url構造SPSite,則該方法返回的就是頂級網站;如果使用的是子網站的Url構造SPSite,則該方法返回的就是相應的子網站。
- OpenWeb(Guid id):使用網站的Guid返回網站。
- OpenWeb(string url):使用網站的相對路徑(相對服務器路徑或相對頂級網站的路徑)返回網站。
例如,可以使用如下的方法來獲取網站:
1: SPSite site1 = new SPSite("http://sp2010/book"); 2: SPWeb web1 = site1.OpenWeb(), 3: theSameAsWeb1 = site1.AllWebs["book"]; 4:? 5: SPSite site2 = new SPSite("http://sp2010"); 6: SPWeb web2 = site2.OpenWeb(), 7: theSameAsWeb2 = site1.RootWeb, 8: anotherWeb1 = site2.OpenWeb("book");(這部分代碼并不完整,詳見后面的說明)
?
4、特殊的網站和網站集獲取方法
之前所介紹的一些獲取方法可以隨時使用,但是當程序運行在IIS進程中時(比如Web頁面、Web部件、一些類型的事件處理程序、工作流等),由于有上下文(Context)的存在,可以很方便的獲取到程序所在的當前網站集和當前網站:
1: SPSite currentSite = SPContext.Current.Site; 2: SPWeb currentWeb = SPContext.Current.Web;?
?
5、網站集和網站的常用屬性
SPSite的常用屬性:
| 名稱 | 類型 | 說明 |
| AllWebs | SPWebCollection | 網站集中的所有網站 |
| RootWeb | SPWeb | 網站集的根網站(頂級網站) |
| Url | string | 網站集的絕對路徑(實際上就是頂級網站的絕對路徑) |
?
SPWeb的常用屬性:
| 名稱 | 類型 | 說明 |
| RootFolder | SPFolder | 網站的根目錄 |
| Site | SPSite | 網站所在的網站 |
| Title | string | 網站標題 |
| Name | string | 相對父網站的Url(不是網站名稱,不要被這個屬性的名字迷惑) |
| Url | string | 網站的絕對路徑 |
| Webs | SPWebCollection | 網站的子網站(不包含孫網站) |
?
由于幾乎所有常用的對象模型都是依附于網站的,這些對象的訪問也基本都以SPWeb作為起點,因此涉及到SPWeb中包含的其他對象操作訪問的屬性和方法,將在后文具體介紹到相應對象的時候再做詳細說明。
?
6、網站集和網站的釋放
由于SPSite和SPWeb的一些內部屬性中,使用到了非托管資源,而這些非托管資源不受.NET的垃圾回收機制控制,因此在使用完SPSite和SPWeb對象之后,一個良好的習慣是手動將其釋放掉,釋放的方法是調用其Dispose方法。例如:
1: SPSite site = new SPSite("http://sp2010/book"); 2: SPWeb web = site.OpenWeb(); 3: // use the web and site 4: web.Dispose(); 5: site.Dispose();當然,更方便的一種方式是使用C#中的using關鍵字,從而在使用完之后自動調用其Dispose方法。因此,一般而言,常用的寫法是下面這種形式:
1: using(SPSite site = new SPSite("http://sp2010/book")) 2: { 3: using(SPWeb web = site.OpenWeb()) 4: { 5: // use the web and site 6: } 7: }在SharePoint應用中,幾乎所有返回的SPSite和SPWeb對象都需要上述釋放過程。但是使用SPContext.Current方式獲取的SPSite和SPWeb不可以釋放!否則會觸發一些意外情況,SharePoint運行時會自動控制這兩個對象的生命周期。
總結
以上是生活随笔為你收集整理的【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡冻结可以还款吗 信用卡冻结了怎么还
- 下一篇: 目前的两类高利率存款,其中一款存10万,