2009-02-09 78 views
2

我收到了關於內容類型及其ID的問題以及如何將它們與對象模型一起使用。SharePoint:內容類型ID與附加到列表實例的內容類型標識不同

首先,我通過CAML定義了一些網站欄,使用這些欄的內容類型和使用此內容類型的列表定義。三個組件中的每一個都是作爲一個功能實現的。另一個功能創建此列表定義的列表實例。

因此,當我嘗試使用我的內容類型向列表添加新項目時,我使用以下代碼。

SPListItem listItem = list.Items.Add(); 
SPContentType type = list.ContentTypes[new ContentTypeId("0x010044fb4458c2eb4800825910845a35554c")]; 
listItem["ContentTypeId"] = type.Id; 
listItem["Title"] = "Titel"; 
listItem.Update(); 

當我執行這段代碼的類型的對象仍然是空,還我敢肯定,內容類型連接到列表中。調試代碼並檢查列表的內容類型會告訴我附加到列表的內容類型沒有我在內容類型定義(CAML)中定義的id。列表實例中的id不同,但是以我在內容類型定義中定義的那個開始。 0x010044FB4458C2EB4800825910845A35554C 0077D683BDD9969F4E920A27C334463321

那麼,這種行爲正常嗎?我期望附加到列表的內容類型具有與定義中相同的id。

我的主要目標是避免使用內容類型的名稱從列表的內容類型中檢索它,但要使用唯一的ID。

再見 弗洛

回答

1

不要過多地將代碼中的內容類型的名稱編碼爲常量。雖然乍一看似乎可以更改內容類型的名稱,但它應該被視爲一個常量,因爲更改內容類型名稱的含義並不足以要求完整構建和重新發布你的解決方案,允許改變編碼常數。

1

列表中的ContentTypeID是ContentTypeID +列表ID。

下面的代碼應該做的伎倆:

//i try and keep these in a string constants class to avoid 
//having to manage "magic strings" throughout my solution 
SPContentTypeID ctid = new ContentTypeId("0x010044fb4458c2eb4800825910845a35554c"); 


//here's the magic 
SPContentTypeID listCTID = list.ContentTypes.BestMatch(ctid); 


//retrieve the ContentType with the appropriate ID 
SPContentType type = list.ContentTypes[listCTID]; 


//do your thing  
SPListItem listItem = list.Items.Add(); 
listItem["ContentTypeId"] = type.Id; 
listItem["Title"] = "Titel"; 
listItem.Update();