2009-11-30 79 views
0

我正在使用我在SharePoint中構建的自定義列表。我有一個功能,它有一個事件處理程序,當功能被激活時會啓動。該事件處理函數調用(我可以調試,看着它執行)以下功能:SPFieldLinkCollection.Reorder故障:未按照說明書工作

我打算這個函數的行爲as described here.

private void OrderFields(SPWeb web) 
{ 
    // This works fine: I get the expected SPContentType object 
    // There is only 1 SPContentType in ContentTypes 
    SPContentType contentType = web.Lists[TASK_LIST_NAME].ContentTypes[0]; 

    contentType.FieldLinks.Reorder(new string[4] 
    { 
     "Field1", 
     "Field2", 
     "Field3", 
     "Field4" 
    }); 

    contentType.Update(); 
} 

調用OrderFields電話web.Update();以及功能。

不幸的是,重新排序調用不會重新排列我的表單上的字段。我錯過了什麼嗎?任何人都可以提出我可能會嘗試的任何技巧?

回答

0

問題出在我的字段名稱上。

我有兩個查找,我以前編程創建的事件處理程序的執行。這些查找的內部名稱與我在CAML定義的Name和StaticName參數中給出的「Field1」和「Field2」名稱有很大不同。

相反,內部名稱似乎由顯示名稱組成,空格替換爲「」,並截斷爲長度爲32個字符。

+0

這就是爲什麼我總是使用功能接收器來創建代碼中的查找字段(因爲除了查找之外,您使用創建任何其他類型字段的常規CAML方式不起作用,並且在您使用UI時不能使用該選項開發一個巨大的網站)。這將發生在通過其中包含空格的用戶界面創建的任何字段中,空格由_x0020_替換,最大值爲32個字符。 – Colin 2009-11-30 23:33:00

+0

功能接收器確實創建查找字段。它通過從模板文件中讀取XML,將模板的List屬性設置爲源列表ID,並調用AddSchemaXML(我忘記了該功能:它不在我面前)。 也許有更好的方法來創建該字段,以便不會發生? – antik 2009-12-01 00:52:16