我已经定义了一个内容类型'相关链接'并设置了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浏览时,我得到以下信息:
答案 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