- SharePoint 2013 應用開發實戰
- 劉中正
- 2041字
- 2021-03-26 18:51:21
2.4 SPList、SPField和SPView對象
SharePoint網站的內容基本上是由各種各樣的列表組成的,而表示這些列表的對象模型就是接下來要介紹的SPList對象。
2.4.1 SPList對象
列表是位于SharePoint網站中的,所以獲取一個列表對象之前首先要做的是獲取到列表所在的網站SPWeb對象,下面的代碼展示了通過列表標題獲取列表對象并打印出列表部分屬性的方法:
string listTitle = string.Empty; string listDescription = string.Empty; string listDefaultViewUrl = string.Empty; string listItemCount=string.Empty; using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists'"文檔"'; listTitle = list.Title; listDescription = list.Description; listDefaultViewUrl = list.DefaultViewUrl; listItemCount = list.ItemCount.ToString(); Console.WriteLine(string.Format("List Title: {0}; List Description: {1}; List DefaultViewUrl: {2}; Item Count: {3}", listTitle, listDescription, listDefaultViewUrl, listItemCount)); } }
上面的例子中,使用SPWeb對象web.Lists將獲取網站對象下所有的列表對象集合,根據最佳實踐的原則,這種方法是低效的,因為目標是獲取一個指定的列表對象,但是使用此方法獲得了整個網站下的列表集合,除了目標列表還獲取了大量無用的列表對象。
推薦的做法是通過列表的URL參數獲取到該列表對象,將SPList list = web.Lists'"文檔"'修改為SPList list = web.GetList(web.Url + “/Shared Documents”)。但是在實際的應用中,可能只知道列表的標題,此時就只能借助集合獲取列表對象了。
添加一個列表的方法跟添加一個網站的代碼結構類似,需要指定列表的標題、列表的描述和列表的模板等屬性,代碼如下:
string listTitle = string.Empty; string listDescription = string.Empty; string listDefaultViewUrl = string.Empty; string listItemCount = string.Empty; using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { Guid listID = web.Lists.Add("代碼創建的文檔庫標題", "代碼創建的文檔 庫描述", SPListTemplateType.DocumentLibrary); SPList list = web.Lists'listID'; listTitle = list.Title; listDescription = list.Description; listDefaultViewUrl = list.DefaultViewUrl; listItemCount = list.ItemCount.ToString(); Console.WriteLine(string.Format("List Title: {0}; List Description: {1}; List DefaultViewUrl: {2}; Item Count: {3}", listTitle, listDescription, listDefaultViewUrl, listItemCount)); } }
添加列表的方法執行成功之后會返回新列表的Guid,用這個ID進行列表對象獲取的操作,然后可以獲取列表的部分屬性。
添加完列表之后,如果要對這個列表的屬性進行修改,可以獲取這個列表對象,對其屬性進行修改之后調用Update方法提交修改:
string listTitle = string.Empty; string listDescription = string.Empty; string listDefaultViewUrl = string.Empty; string listItemCount=string.Empty; using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists'"代碼創建的文檔庫標題"'; list.Title = "代碼創建的文檔庫標題改"; list.Description = "代碼創建的文檔庫描述改"; list.Update(); listTitle = list.Title; listDescription = list.Description; listDefaultViewUrl = list.DefaultViewUrl; listItemCount = list.ItemCount.ToString(); Console.WriteLine(string.Format("List Title: {0}; List Description: {1}; List DefaultViewUrl: {2}; Item Count: {3}", listTitle, listDescription, listDefaultViewUrl, listItemCount)); Console.ReadKey(); } }
接下來刪除剛才創建的列表,同樣需要借助SPWeb對象的Lists屬性集合來進行操作,代碼如下:
using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { SPList list = web.Lists'"代碼創建的文檔庫標題改"'; list.Delete(); } }
如果讀者有過傳統ASP.NET數據庫系統的開發經驗,那么大可將列表看成是類似SQL數據表的東西,并且實際上SharePoint上的內容也都是存儲在SQL數據庫中的,筆者建議讀者參照SQL數據表去理解SharePoint列表,印象會更深刻。
2.4.2 SPField和SPView對象
就像有了表就需要有字段一般,SharePoint有了列表就需要有相應的欄,這就是SharePoint中欄的概念,實際上欄就是SharePoint列表的字段,表明這個列表有哪些屬性。在服務器端對象模型中,與之對應的對象編程模型叫做SPField。
SQL數據表的字段有多種數據類型,同樣列表欄也有多種數據類型,基本可以與SQL數據表字段的數據類型對應。具體的數據類型可以在列表管理頁面點擊創建欄的彈出窗體中看到,這里不做細致講述。
同樣的角度也可以用來理解SPView對象模型,可以把它看作是類似SQL視圖的東西,只不過視圖的范圍僅局限于列表內部。SharePoint列表的視圖用來決定顯示列表中的哪些欄,不同的視圖可以有不同的欄組合、篩選、排序和分組條件,這些條件由CAML語句定義,關于CAML語句和列表查詢相關的內容,將在后面的章節進行闡述。
與之前列表要基于網站一個道理,欄要基于列表,講SPField和SPView這兩個對象的使用之前,為了便于讀者理解,筆者在網站中創建了一個自定義列表。自定義列表是SharePoint中最基本的列表,默認只帶一個標題欄。列表的名稱是自定義列表,列表URL為/Lists/List/AllItems.aspx,列表的默認視圖為所有項目視圖。如圖2-10所示。

圖2-10 全新的自定義列表
下面的代碼演示獲取該自定義列表的標題欄和默認視圖并輸出部分屬性,輸出結果如圖2-11所示。

圖2-11 自定義列表標題欄的部分屬性輸出
using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { string fieldTitle = string.Empty; string fieldDescription = string.Empty; string fieldTypeDisplayName = string.Empty; string viewTitle = string.Empty; string viewUrl = string.Empty; using (SPWeb web = site.OpenWeb()) { SPList customList = web.GetList(web.Url + "/Lists/List/"); SPField titleField = customList.Fields.GetField("標題"); fieldTitle = titleField.Title; fieldDescription = titleField.Description; fieldTypeDisplayName = titleField.FieldTypeDefinition.TypeDisplayName; SPView defaultView = customList.DefaultView; viewTitle = defaultView.Title; viewUrl = defaultView.Url; Console.WriteLine(string.Format("Filed title: {0}; Field description: {1}; Field Type Name: {2}", fieldTitle, fieldDescription, fieldTypeDisplayName)); Console.WriteLine(string.Format("View title: {0}; View Url: {1}", viewTitle, viewUrl)); } }
列表只有一個欄未免有些太枯燥了,下面給該列表添加一個多行文本框類型的欄,將它變成一個可用于發布通知公告的列表:
using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { SPList customList = web.GetList("/Lists/List/"); string fieldInternalName = customList.Fields.Add("內容", SPFieldType.Note, true); customList.Update(); } }
細心的讀者會發現代碼執行完之后在列表的默認視圖中并沒有看到添加的欄。這是因為添加操作僅負責將欄添加到列表中,此時新添加的欄并沒有作為默認視圖的顯示欄顯示出來。下面的代碼將展示如何完成這個操作并對欄的標題進行簡單的修改:
using (SPSite site = new SPSite("http://<mysiteurl>/subSite")) { using (SPWeb web = site.OpenWeb()) { SPList customList = web.GetList(web.Url + "/Lists/List/"); SPField contentField = customList.Fields.GetField("內容"); contentField.Title = "公告內容"; contentField.Update(); SPView defaultView = customList.DefaultView; defaultView.ViewFields.Add(contentField); defaultView.Update(); } }
執行完上述操作后列表如圖2-12所示。

圖2-12 代碼執行后的自定義列表
對于列表欄和視圖的刪除跟之前介紹的一樣,獲取到對象之后執行Delete方法,這里不再贅述。
關于SPField對象還有一點需要說明。在服務器端對象模型中的列表欄部分,SPField是作為一個基類存在的,開發人員在平時的開發中使用它可以滿足基本的操作。實際上對于列表欄的每個數據類型,都有一個與之對應的SPFieldXXX對象,比如上文演示中創建的Note類型,準確地說該欄對應的是SPFieldMultiLineText對象。在開發過程中如果需要細致地對每個欄進行定制化操作,筆者推薦使用精準的類型去操作。獲取這些對象可采用C#的as關鍵字在獲取到SPField對象之后進行轉換,如:
SPFieldMultiLineText contentField = customList.Fields.GetField("公告內容") as SPFieldMultiLineText;
這樣就可以使用SPFieldMultiLineText對象特有的RichText和RichTextMode等屬性了。
- Mastering ElasticSearch
- Linux運維實戰:CentOS7.6操作系統從入門到精通
- Ansible權威指南
- Ganglia系統監控
- Windows Server 2012 Hyper-V Cookbook
- 嵌入式應用程序設計綜合教程(微課版)
- Ubuntu Linux操作系統
- SharePoint 2013 應用開發實戰
- RESS Essentials
- Windows 7案例教程
- Vim 8文本處理實戰
- 新編電腦辦公(Windows 10+ Office 2013版)從入門到精通
- Agile IT Security Implementation Methodology
- Azure Resource Manager Templates Quick Start Guide
- Less Web Development Essentials