我正在尝试将自定义内容类型从一个网络复制到另一个网站。我已经google了一下,发现了一些使用FieldLinks和Fields的例子。我很遗憾要使用哪一个,因为当我从源网站获得FieldLinks时,我得到3个字段;从Fields中检索时只返回2个字段...缺少自定义字段。我非常确定我已经在适当级别添加了字段,因为我是通过界面完成的。但是当使用代码检索它时...数字只是不加起来。
除了那个奇怪的问题,我想知道FieldLinks和Fields之间的区别,以及在内容类型(以编程方式)处理它们时应该使用哪一个?
感谢。
答案 0 :(得分:10)
SPFields是字段本身,而SPFieldLinks是字段的引用。 This is a good read that will explain things in detail。在一般实践中,在处理实际内容类型定义时使用SPFieldLinks更安全。不过,我会在这里给出一个快速摘要。
列表和Web包含具有字段数据的实际字段。另一方面,内容类型仅保存字段引用,字段引用仅指向列表或Web中的相应字段。这有点令人困惑,因为内容类型同时具有SPFieldLinkCollection和SPFieldCollection。
SPFieldLinkCollection用于内容类型的实际定义,是您在将内容类型从一个Web复制到另一个Web的情况下要使用的内容。 SPFieldLinks对应于XML Schema中内容类型的实际元素。
相比之下,当您调用内容类型的SPFieldCollection并从中检索字段时,实际发生的是内容类型正在检查相应的字段引用,然后在列表/ Web中查找以获取实际字段。基本上,以与查找相同的方式来考虑SPFieldCollection:如果没有查找值和查找源,它就毫无价值。