为什么在向内容类型添加字段时要使用fieldLinks

本文关键字:fieldLinks 字段 添加 类型 为什么 | 更新日期: 2023-09-27 18:21:25

当我搜索有关使用代码(C#)创建内容类型的文档时,我总是找到使用SPFieldLink链接到网站现有字段并通过添加的示例

contentType.FieldLinks.Add()

但是也有一种直接添加字段的方法。有没有充分的理由让我不应该简单地使用添加字段

contentType.Fields.Add(SpField())

提前感谢

为什么在向内容类型添加字段时要使用fieldLinks

查看列表的XML可能会有所帮助。

以下是公告内容类型的XML:

<FieldRefs>
    <FieldRef ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Name="Body" />
    <FieldRef ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Name="Expires" />
</FieldRefs>

这是公告列表的XML:

<Fields>
  <Field ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Type="Note" RichText="TRUE" RichTextMode="FullHtml" IsolateStyles="TRUE" NumLines="15" Name="Body" DisplayName="$Resources:core,camlid2;" Sortable="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Body">
  </Field>
  <Field ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Type="DateTime" Name="Expires" DisplayName="$Resources:core,camlid3;" Format="DateOnly" FromBaseType="TRUE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Expires">
  </Field>
</Fields>

列表有字段。内容类型具有FieldRef。

我不确定这是否正确,但我总是把它描述为类和接口或抽象类之间的区别。内容类型是列表的定义,但与接口一样,它不包含任何数据或功能。由于"字段"包含数据和功能,因此"内容类型"(与列表解除关联)没有"字段",而是有"字段参照"。YMMV——但这总是能帮助我保持头脑清醒。

我现在发现了一个简单的原因:它对ContentTypes不起作用。当尝试直接添加字段时,SP2010会向我发送一个异常:

此功能不适用于与列表不关联的字段集合。

我绝对没有想到会发生这种事(也没有想到西班牙的宗教调查),但这似乎是不可能的。