字段未显示在内容类型的列表上Inherits =“False”

时间:2012-01-16 06:13:40

标签: list sharepoint-2010 caml contenttype

我已经定义了一个内容类型'相关链接'并设置了Inherits =“False”并添加了一行来删除开箱即用的'title'字段,因为我不希望它在视图中显示或者是新的/编辑/显示表格,见下面的CAML中的(选项1)。

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

    <!-- ===== Fields ===== -->
    <!-- Link Category -->
    <Field DisplayName="Link Category"
           Name="LinkCategory"
           ID="{654EAC00-342B-4176-9D91-613AD724F684}"
           Group="Custom"
           Overwrite="True"
           Type="Lookup"
           ShowField="Title"
           List="Lists/LinkCategoryList"
           WebId="~sitecollection" />

    <!-- ===== Content Type ===== -->
    <!-- 
    Related Links
     - Parent ContentType: Item (0x01)
    -->
    <ContentType Name="Related Links"
                 ID="0x0100c11a1db14e564574bc49a2aa9bf325d3"
                 Group="Custom"
                 Description=""
                 Inherits="False"
                 Version="0">
        <FieldRefs>
            <!-- Title (OPTION 1) -->
            <RemoveFieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" />
            <!-- (OPTION 2)
            <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" 
                      Hidden="TRUE" Required="FALSE" DisplayName="_hidden" />
            -->
            <!-- Link Category -->
            <FieldRef DisplayName="Link Category"
                      Name="LinkCategory"
                      ID="{654EAC00-342B-4176-9D91-613AD724F684}"
                      Required="True" />
        </FieldRefs>
    </ContentType>

</Elements>

这会从内容类型中删除“标题”字段,但是当我尝试将内容类型与列表相关联时,它不会在视图或新/编辑/显示表单中显示“LinkCategory”字段。为什么会这样?

<?xml version="1.0" encoding="utf-8"?>
<List xmlns:ows="Microsoft SharePoint"
      Title="Related Links"
      FolderCreation="FALSE"
      Direction="$Resources:Direction;"
      Url="Lists/RelatedLinksListDefinition"
      BaseType="0"
      EnableContentTypes="True"
      xmlns="http://schemas.microsoft.com/sharepoint/">
    <MetaData>
        <ContentTypes>
            <!-- Related Links -->
            <ContentTypeRef ID="0x0100c11a1db14e564574bc49a2aa9bf325d3" />
        </ContentTypes>
        <Fields>
        </Fields>
        <Views>
            <View ...etc...>
                <ViewFields>
                    <FieldRef Name="LinkCategory"></FieldRef>
                </ViewFields>
                <Query>
                    <OrderBy>
                        <FieldRef Name="ID"></FieldRef>
                    </OrderBy>
                </Query>
            </View>
        </Views>
        <Forms>
            <Form Type="DisplayForm" Url="DispForm.aspx"
                  SetupPath="pages\form.aspx" WebPartZoneID="Main" />
            <Form Type="EditForm" Url="EditForm.aspx"
                  SetupPath="pages\form.aspx" WebPartZoneID="Main" />
            <Form Type="NewForm" Url="NewForm.aspx"
                  SetupPath="pages\form.aspx" WebPartZoneID="Main" />
        </Forms>
    </MetaData>
</List>

作为一种解决方法,我在内容类型上设置了Inherits =“True”,并在内容类型CAML中使用了(选项2)并隐藏了“标题”字段,但是我真的很想了解这里发生了什么什么是最好的方法。提前谢谢!

PS:这篇文章有类似的问题:SharePoint 2010: RemoveFieldRef and Inherits="TRUE"

PSS:当我使用OPTION 1部署后通过SP Manager 2010浏览时,我得到以下信息:

  • '链接类别'字段正确创建
  • '相关链接'使用'链接类别'字段正确创建的内容类型
  • 使用“相关链接”关联的内容类型
  • 创建的“相关链接”列表
  • 但是,“相关链接”列表没有引用“链接类别”字段。

1 个答案:

答案 0 :(得分:1)

好的,就在我走上花园小路的路上......

“相关链接”列表中未创建“链接类别”字段的原因与设置Inherits =“False”无关,这是因为我没有在列表模式中定义它,即使我是d在内容类型中定义它。如上所述:

http://msdn.microsoft.com/en-us/library/aa543576.aspx

  

当SharePoint Foundation创建列表实例时,它仅包含   那些在列表的基本类型模式中声明的列或   在列表架构中。如果您在列表中引用网站内容类型   架构,该内容类型引用不是的站点列   包含在列表的基本类型模式中或列表模式中,   这些列不包括在内。您必须在中声明这些列   列出SharePoint Foundation的架构,以将它们包含在列表中。

在这里:

http://stefan-stanev-sharepoint-blog.blogspot.com/2010/03/contenttypebinding-vs-contenttyperef.html

  

关于它的一个丑陋之处在于您指定了网站内容类型   基于该列表定义附加到列表但是框架   如果缺少内容类型中的字段,则不会对其进行配置   在列表中 - 所以你需要手动添加所有内容类型的字段   列表模式文件的Fields元素。这实际上就是我   称为字段的重新定义问题......

以下重复的Field元素从内容类型定义到列表模式:

    <Fields>
        <Field DisplayName="Link Category"
               Name="LinkCategory"
               ID="{654EAC00-342B-4176-9D91-613AD724F684}"
               Group="Custom"
               Overwrite="True"
               Type="Lookup"
               ShowField="Title"
               List="Lists/LinkCategoryList"
               WedId="~sitecollection" />
    </Fields>

我可以确认使用Inherits =“False”&amp; <RemoveFieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" />会删除标题字段。

对于那些偶然发现这篇文章的人来说,这是另一个关于Inherits =“False”的好链接。

https://sharepoint.stackexchange.com/questions/2995/mysteries-of-the-contenttype-inherits-attribute