在MOSS2007中检测自定义文件夹内容类型

时间:2009-11-18 12:27:51

标签: sharepoint content-type

给定表示文件夹的SPListItem,我需要确定它是否具有内置文件夹内容类型,或者是否具有自定义文件夹内容类型(带有其他字段)。

这是我做的事情

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

    if ( contentType != folderType )
       ...

但是,对于默认文件夹,我仍然获得与内置类型不同的内容类型。它们的ID为0x0120007C34D9760794FA43AB267F4E1A1BF460。我不确定这个特定的GUID后缀来自哪里,我在my \ features文件夹的任何定义中都找不到它。

我最好的猜测是,实例化文件夹始终会获得自定义类型。如果是这种情况,有关我如何能够区分内置文件夹和自定义文件夹的任何建议?

2 个答案:

答案 0 :(得分:1)

如果内容类型附加到列表,则不会直接附加,但会创建并附加其副本。然后,原始内容类型ID附加一个Guid,并成为“新”内容类型的id。

如果您保持guide lines for defining content type ids,那么您的自定义文件夹内容类型ID应该类似于0x0120 + 00 + <Guid>

因此,如果您检查项目的内容类型,无论是默认文件夹还是自定义文件夹,自定义文件夹的ID将类似于0x0120 + 00 + <Guid> ==&gt;基本文件夹内容类型id +用于将其附加到列表的Guid。

与此相反,自定义文件夹的ID看起来像0x0120 + 00 + <Guid> + <Guid> ==&gt;基本文件夹内容类型+自定义内容类型的Guid +用于将其附加到列表的Guid。

为了使比较更容易,您不应该比较实际内容类型的ID,而是查看内容类型ID parent id。对于自定义文件夹,父项ID为0x0120,对于自定义文件夹,它将为0x0120 + 00 + <Guid>

答案 1 :(得分:1)

假设 aFolderItem 是代码 SPListItem 的变量,代码应该得到你想要的。

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