【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)
(四)欄/字段
SharePoint中的字段(中文版中叫做“欄”)與傳統(tǒng)的數(shù)據(jù)欄類似,也有不同類型的區(qū)別,不過SharePoint中內(nèi)置的欄類型除了按照數(shù)據(jù)類型(如數(shù)字、日期和時間等)進(jìn)行區(qū)分之外,更多的是從應(yīng)用類型(貨幣、選項(xiàng)、查閱項(xiàng)等)進(jìn)行分類。除內(nèi)置的字段類型之外,SharePoint同樣允許我們通過開發(fā)的方式實(shí)現(xiàn)自定義字段類型的擴(kuò)展。在SharePoint中使用SPField表示字段,使用SPFieldCollection表示字段集合,內(nèi)置的字段類型使用SPFieldType枚舉表示。
?
1、字段相關(guān)類
在SharePoint中,SPField作為字段的基礎(chǔ)類型,包括了字段的基本元素和基本屬性。對于每一種特定的字段類型,在SharePoint中都有相應(yīng)的類與之對應(yīng)。這些類都是SPField直接或間接的字類,這些類的命名也都是以SPField開頭。例如表示單行文本的SPFieldText、表示選項(xiàng)的SPFieldChoice、表示查閱項(xiàng)的SPFieldLookup等,完整的繼承關(guān)系可以參看SDK中關(guān)于SPField的描述。不同的特定類中,包含了對相應(yīng)字段類型的設(shè)置屬性,例如針對數(shù)字字段類型的最大值、最小值屬性,就包含在SPFieldNumber的MaximumValue和MinimumValue兩個屬性中。
對于一些普通字段類型,其值類型都是比較簡單的數(shù)據(jù),例如單行文本、多行文本字段是字符串類型(string)的值,數(shù)值字段是數(shù)值類型(double)的值,時間日期字段是時間日期類型(DateTime)的值。但是諸如超鏈接、查閱項(xiàng)、人員和組這些字段類型的值難以使用一個簡單的類型表示,在SharePoint中,針對這些字段有專門的值類型,其名稱為字段類+Value,例如表示超鏈接值的SPFieldUrlValue、表示查閱項(xiàng)值的SPFieldLookupValue等。
下面的程序展示了如何獲取日期類型和人員和組類型的值,注意其區(qū)別(假設(shè)網(wǎng)站中存在一個叫做“Chapters”的列表,并且其中至少存在一個條目):
1: using(SPSite site = new SPSite("http://sp2010/book")) 2: { 3: using(SPWeb web = site.OpenWeb()) 4: { 5: SPList list = web.Lists["Chapters"]; 6: SPListItem item = list.Items[0]; 7: foreach(SPField field in list.Fields) 8: { 9: if(field.Type == SPFieldType.DateTime) 10: { 11: DateTime dtValue = Convert.ToDateTime(item[field.Id]); 12: // use dtValue 13: } 14: else if(field.Type == SPFieldType.Url) 15: { 16: SPFieldUrlValue urlValue = new SPFieldUrlValue( 17: Convert.ToString(item[field.Id])); 18: string url = urlValue.Url; 19: // use url 20: } 21: } 22: } 23: }在上面的程序中,使用到了一些和列表?xiàng)l目相關(guān)的操作,雖然尚未介紹,但應(yīng)當(dāng)很容易理解其含義。
?
2、關(guān)于顯示名稱和內(nèi)部名稱
每一個SharePoint字段都有一個顯示名稱(SPField的Title屬性)和一個內(nèi)部名稱(SPField的InternalName屬性),這兩個都是字符串類型的屬性。
顯示名稱是在創(chuàng)建字段的時候,由用戶指定的名稱,沒有特定的要求。通過網(wǎng)頁創(chuàng)建字段的時候,顯示名稱是不允許重復(fù)的,但通過代碼完全可以創(chuàng)建顯示名稱相同的多個字段,而實(shí)際上,每個列表中本身就包含了一些顯示名稱相同的字段(如自定義列表的“標(biāo)題”字段、文檔庫的“名稱”字段等),在Visual Studio的服務(wù)器資源管理器中,我們可以很直觀地看到這些重名的字段(如下圖)。
而內(nèi)部名稱則是由SharePoint根據(jù)用戶輸入的顯示名稱,按照一定的命名規(guī)律自動生成的(用戶無法干預(yù)這個過程)。內(nèi)部名稱只能包含大小寫英文字母、數(shù)字和下劃線這三類字符,對于其他的字符,基本上以Unicode編碼的形式表現(xiàn)(這里之所以說“基本上”,是因?yàn)槠渲羞€存在著許多例外情況,比如創(chuàng)建一個名叫“num1”的字段,內(nèi)部名稱會變成“_x006e_um1”。因此我們不能夠以這種“基本上”的規(guī)則,去根據(jù)一個字段顯示名稱來“推測”出它的內(nèi)部名稱)。例如一個顯示名稱叫“My Field”的字段,其內(nèi)部名稱可能是“My_x0020_Field”,而一個顯示名稱為“中文”的字段,其內(nèi)部名稱可能是“_x4e2d__x6587_”。字段的內(nèi)部名稱在SharePoint網(wǎng)站中很少有機(jī)會被查看到,但是通過使用Visual Studio的服務(wù)器資源管理器,在編寫程序的過程中就可以非常方便地查看到我們選定字段的內(nèi)部名稱(如下圖所示)。
在字段創(chuàng)建之后,其內(nèi)部名稱是不會改變的,即使將該字段重命名之后,更改的也只是其顯示名稱,內(nèi)部名稱依然保留原有的名稱。并且,在一個列表中,字段的內(nèi)部名稱是不可能重復(fù)的(讀者可以自己做一些試驗(yàn))。
雖然列表字段的內(nèi)部名稱在SharePoint使用過程中幾乎體會不到,但是在SharePoint開發(fā)中,有很多場景必須要使用字段的內(nèi)部名稱來指定一個字段(比如列表查詢),因此要熟悉內(nèi)部名稱的查看和使用方法。在實(shí)際項(xiàng)目中創(chuàng)建字段的時候,盡可能先使用英文創(chuàng)建字段(保證其內(nèi)部名稱看起來有意義而且容易記憶)再修改其顯示名稱為中文。
?
3、字段的獲取
獲取字段的方式一般都是先通過SPList的Fields屬性獲取到列表中所有字段的集合(SPFieldCollection類型),再使用如下方法獲取其中某個特定的字段:
(1) Fields[idx]:int型索引器,使用下標(biāo)獲取字段,很少使用;
(2) Fields[displayName]:string型索引器,使用字段的顯示名稱獲取;
(3) 使用Fields.GetField(string name)方法,使用字段的內(nèi)部名稱或顯示名稱獲取(優(yōu)先判斷內(nèi)部名稱);
(4) 使用Fields.GetFieldByInternalName(string internalName)方法,使用字段的內(nèi)部名稱獲取字段。
除此之外,我們還可以通過SPFieldCollection的ContainsField方法,根據(jù)字段的顯示名稱或內(nèi)部名稱,來判斷某個特定名稱的字段是否存在。
?
4、字段的常用屬性
SPField的常用屬性如下:
| 名稱 | 類型 | 說明 |
| InternalName | string | 字段的內(nèi)部名稱 |
| Title | string | 字段的顯示名稱 |
| Type | SPFieldType | 字段的類型 |
| Required | bool | 字段是否為必填 |
| SchemaXml | string | 字段的通用屬性描述 |
| ShowInDisplayForm | Nullable<bool> | 是否在列表?xiàng)l目的查看頁面顯示此字段 |
| ShowInEditForm | Nullable<bool> | 是否在列表?xiàng)l目的編輯頁面顯示此字段 |
| ShowInNewForm | Nullable<bool> | 是否在列表?xiàng)l目的新建頁面顯示此字段 |
SPField的ShowInDisplayForm / ShowInEditForm / ShowInNewForm三個屬性在實(shí)際項(xiàng)目中面臨的需求中可能經(jīng)常會使用到。使用SharePoint列表搭建的應(yīng)用,在有些情況下,一些字段可能會要求不顯示在查看界面中(僅供后臺程序使用),或者不顯示在新建界面中(由程序指定初始值),或者不顯示在編輯界面中(不允許用戶修改)。通過這三個屬性就可以實(shí)現(xiàn)這些需求。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 河南许昌多处水泥路被高温晒拱起 温度计放
- 下一篇: 让Team Foundation Ser