官术网_书友最值得收藏!

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等屬性了。

主站蜘蛛池模板: 土默特左旗| 宁波市| 迁西县| 海淀区| 莲花县| 江门市| 屏东县| 双城市| 二连浩特市| 玉门市| 衡水市| 姜堰市| 姚安县| 凤城市| 河南省| 蓬安县| 连平县| 平顶山市| 商水县| 江门市| 铜山县| 阿勒泰市| 青龙| 崇信县| 沾化县| 巴林右旗| 阳信县| 金昌市| 潮安县| 同心县| 麻城市| 财经| 遂昌县| 黎平县| 东山县| 耿马| 桦南县| 中超| 周宁县| 安宁市| 张北县|