【问题标题】:Detecting custom folder content types in MOSS2007检测 MOSS2007 中的自定义文件夹内容类型
【发布时间】:2010-12-17 20:36:12
【问题描述】:

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

这就是我的工作

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

    if ( contentType != folderType )
       ...

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

我最好的猜测是实例化的文件夹总是有一个自定义类型。如果是这种情况,关于我如何区分内置文件夹和自定义文件夹的任何建议?

【问题讨论】:

    标签: sharepoint content-type


    【解决方案1】:

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

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

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

    相比之下,自定义文件夹的 id 类似于 0x0120 + 00 + <Guid> + <Guid> ==> 基本文件夹内容类型 + 自定义内容类型的 Guid + 将其附加到列表的 Guid。

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

    【讨论】:

    • 啊哈,感谢您确认这是工作方式。现在我想了更多关于它,它实际上有点明显(查看列表内容类型如何可以具有与父站点内容类型分开的自定义)。您关于如何检测(应用)内置文件夹的建议应该像一个魅力。很棒。
    【解决方案2】:

    假设 aFolderItemSPListItem 类型的变量,下面的代码应该得到你想要的。

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

    【讨论】:

    • 同意,但我想看看 BUILTIN 文件夹和 CUSTOM 文件夹之间的区别。两者都肯定是 SPBuiltInContentTypeId.Folder 的孩子。
    • 即不是直子,而是后代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多