字段和字段引用
上次修改时间: 2010年7月21日
适用范围: SharePoint Foundation 2010
本文内容
列是字段或字段引用
向列表添加列
引用内容类型中的列
本主题讨论字段和字段引用之间的差异。
列是字段或字段引用
在各种 SharePoint Foundation 架构(如网站、列表和内容类型定义)中,列表示为 Field 或 FieldRef 元素 (ContentType) 元素。
网站和列表列在网站和列表定义中表示为 Field 元素。但是,网站和列表列引用在内容类型定义中表示为 FieldRef 元素。类似地,网站和列表中包含的网站和列表列在对象模型中表示为 SPField 对象,而内容类型中的网站和列表列引用表示为 SPFieldLink 对象。
Field 元素包含网站或列表列的完整定义。
FieldRef 元素是对在其他位置(网站或列表级别)上定义的列的引用。在字段引用中,可以重写列属性的子集,如下所示:
显示名称
XML 升级和降级属性
字段是可选的、必需的还是隐藏的
若在字段引用中更改这些属性,则这些属性只会在其应用于包含该字段引用的特定内容类型时发生更改。
向列表添加列
可以将网站栏当作模板;创建网站级别的网站栏,然后可将其应用于所需的列表和子网站。
有关网站栏的详细信息,请参阅列介绍。
在向列表添加网站栏时,列定义将作为列表列本地复制到列表中。因此,在列表架构中,列表列现在由 Field 元素表示。在对象模型中,列表列由 SPField 对象表示。
同样,在向列表添加网站栏时,生成的列表列具有与该网站栏相同的字段 ID。SharePoint Foundation 使用此 ID 来跟踪那些作为给定网站栏的"子级"的列表列。这使您能够对网站栏进行更改并将这些更改传播到作为该网站栏的子级的所有列表列中。
有关详细信息,请参阅更新网站栏。
也可以在列表级别创建列。这些列仅适用于在其上创建它们的列表。只能向该列中的内容类型添加列表列。同样,列表列在列表架构中表示为 Field 元素,在对象模型中表示为 SPField 对象。由于列表列不是从其他列派生的,因此它们与任何其他列之间不存在任何父/子关系。
引用内容类型中的列
若要跟踪内容类型中的特定元数据,则可以引用表示该元数据的列。不过,不能在内容类型中创建列;必须创建列,然后在内容类型定义中引用该列。因此,当向内容类型添加列时,此内容类型的架构不包含 Field 元素;它包含 FieldRef 元素。对于要添加到内容类型的网站和列表列,都是如此。
字段引用保留与其引用的列相同的字段 ID。
如果创建基于父内容类型的内容类型,则默认情况下,父级中引用的所有列在子内容类型中都表示为 FieldRef 元素。
在向列表添加内容类型时,该内容类型中引用的列将作为列表列本地复制到列表中。由内容类型架构中的各种 FieldRef 元素引用的列将作为 Field 元素复制到此列表架构中,它与网站栏之间也具有父/子关系。
在列表内容类型中引用列表列时,该列表列将作为 FieldRef 元素添加到列表内容类型架构中。
因此,列在网站和列表架构中总是由 Field 元素表示,而在内容类型架构中总是由 FieldRef 元素表示。
内容类型中的字段引用在 Windows SharePoint Services 3.0 对象模型中由 SPFieldLink 对象表示。
下图演示了这种关系。假定您在内容类型中引用 Author 网站栏。在内容类型架构中,此列引用由 FieldRef 元素表示。在向列表添加内容类型时,SharePoint Foundation 会将 Author 列作为 Field 元素添加。这两个元素具有与 Author 网站栏相同的字段 ID。在列表内容类型中引用列表列"ItemNo"时,SharePoint Foundation 会将其作为具有同一字段 ID 的 FieldRef 元素添加。