2009-11-18 55 views
2

給定表示文件夾的SPListItem,我需要確定它是否具有內置文件夾內容類型或自定義文件夾內容類型(帶有附加字段)。檢測MOSS2007中的自定義文件夾內容類型

這是我做的

SPContentType folderType = aFolderItem.Web.AvailableContentTypes[SPBuiltInContentTypeId.Folder]; 
    SPContentType contentType = aFolderItem.ContentType; 

    if (contentType != folderType) 
     ... 

然而,默認文件夾我還是得到了不同的內容類型比內置式。他們有像0x0120007C34D9760794FA43AB267F4E1A1BF460 ID。我不確定這個特定的GUID後綴來自哪裏,我無法在我的\ features文件夾的任何定義中找到它。

我最好的猜測是實例化的文件夾總是得到一個自定義類型。如果是這樣的話,有關我如何能夠區分內置文件夾和自定義文件夾的任何建議?

回答

1

如果內容類型附加到列表中,則不會直接附加內容類型,但會創建並附加它的副本。原始內容類型標識隨後附加Guid,併成爲「新」內容類型的標識。

如果你保留到guide lines for defining content type ids,那麼你自定義的文件夾內容類型ID應該看起來像0x0120 + 00 + <Guid>

因此,如果您檢查項目的內容類型,無論是默認文件夾還是自定義文件夾,自定義文件夾的編號將類似0x0120 + 00 + <Guid> ==>基本文件夾內容類型編號+將Guid附加到列表中。

相比之下,自定義文件夾的ID看起來像0x0120 + 00 + <Guid> + <Guid> ==>基本文件夾內容類型+ Guid爲您的自定義內容類型+ Guid附加到列表。

爲了使比較更容易些,你不應該比較實際的內容類型的ID,但看看內容類型的ID parent id。對於自定義文件夾,父母ID是0x0120,對於自定義文件夾,它將是0x0120 + 00 + <Guid>

+0

啊哈,感謝您確認事情的方式。現在我想了解更多,它實際上很明顯(看看列表內容類型可以具有與父網站內容類型分開的自定義)。 關於如何檢測(應用)內置文件夾的建議應該像魅力一樣工作。優秀。 – 2009-11-18 19:27:19

1

假設aFolderItem是下面的代碼類型SPListItem的變量應該得到你想要的東西。

if(aFolderItem.ContentType.Id.IsChildOf(SPBuiltInContentTypeId.Folder)) 
      ...this is a Folder 
else 
      ...this is not a Folder 
+0

同意,但我想看看BUILTIN文件夾和CUSTOM文件夾之間的區別。兩者肯定都是SPBuiltInContentTypeId.Folder的孩子。 – 2009-11-18 19:20:54

+0

I.e.不是直接的孩子,而是後代。 – 2009-11-19 07:40:03