當大家需要擴充一個SharePoint列表/文件庫的資料結構時,就會為列表/文件庫建立新的欄位(欄)。不管是直接為列表/文件庫建立欄位,還是在網站集合裡面建立網站欄,作為管理員,最好使用一些“最佳實務”來為欄位命名。使用正確的欄位名,在未來的配置、管理、開發過程中,都可以節省很多的時間和精力。
每個SharePoint欄位實際上有兩個名稱,一個是“標題”(Title,有時候也把它叫做“顯示名稱”),一個是“內部名稱”(Internal Name)。平時使用者在列表視圖介面上看到的,都是欄位的標題。欄位的內部名稱可以看作是欄位的唯一標識。如果你曾經使用SharePoint物件模型,通過代碼從列表中擷取資料,那麼對“內部名稱”這個概念一定很熟悉。基本上,SharePoint對“內部名稱”的格式有非常嚴格的要求,它只能由英文字母、數字和底線字組成,且不能包含空格。但是“標題”則沒有這麼多限制,通常我們會使用中文作為欄位的“標題”,而且“標題”中很可能會包含空格。當一個欄位被建立之後,它的“內部名稱”就被固定下來了,但是“標題”則可以在之後被隨時修改。
var list = site.Lists["任務"];
var titleField = list.Fields.GetFieldByInternalName("Title"); // 使用欄位的內部名稱來擷取一個欄位
var statusField = list.Fields.GetField("狀態"); // 使用欄位的標題來擷取一個欄位,注意,GetField()會先嘗試內部名稱,然後再嘗試使用標題進行尋找
怎麼知道一個欄位的內部名稱呢?最簡單的方法就是對一個欄位進行編輯,然後觀察瀏覽器地址欄中的URL地址。比如,當我們編輯“狀態”欄位時,在地址欄就能看到一個“Field=Status”參數,這表示“狀態”欄位的內部名稱是“Status”。
當我們在Visual Studio 2010中開發SharePoint應用程式時,也可以通過VS內建的SharePoint Explorer來查看一個欄位的詳細資料。在VS2010的“伺服器總管”中點擊“添加SharePoint串連”,就能開啟一個SharePoint網站。
通過展開列表節點,就能直接查看列表的所有欄位,以及欄位的各種屬性。內部名稱這個屬性也能直接看到。
但是當管理員建立一個欄位時,在頁面UI上並不能分別輸入新欄位的標題和內部名稱。在建立欄位的介面上,只有一個“欄名”文字框。
SharePoint系統會使用管理員輸入在“欄名”文字框內的內容作為新欄位的標題,然後根據這個標題,調用System.Xml.XmlConvert.Encode()方法,來將標題自動轉換成內部名稱。這樣,才能讓轉換後的內部名稱符合SharePoint對內部名稱命名的規範。
比如,如果管理員使用頁面UI建立一個標題為“Live ID”的欄位,這個欄位的內部名稱會被自動命名為“Live_x0020_ID”。如果管理員建立一個標題為“技術等級”的欄位,它的內部名稱將是“_x6280__x672f__x7b49__x7ea7_”。
但是這種自動轉換後的內部名稱的格式非常不好看,也不易記憶。實際上,管理員應該始終使用一個符合內部名稱規範的名稱,來建立欄位,這樣這個新欄位的內部名稱和標題都相同。然後,管理員再回過頭去修改這個欄位,將其標題修改為更符合使用者習慣的名字。由於內部名稱一旦確定就不再更改,所以欄位的內部名稱將始終保持為初始值。