我有一个假设的问题(至少目前为止:))
假设我根据一些自定义内容类型创建列表。我在该列表中添加了大约1000个项目(在生产中)。然后客户来了,他说他需要修改自定义内容类型。
如果修改自定义内容类型,列表会发生什么?它会自动更新(我怀疑)?那已经创建的列表项呢?
你们有没有这方面的经验?
答案 0 :(得分:16)
关于内容类型的几个问题:
首先,内容类型有两种形式:网站内容类型和列表内容类型。网站内容类型是驻留在图库中的“模板”。在列表中使用站点内容类型时,内容类型将在给定列表中实例化为列表内容类型。
其次,您可以通过多种方式创建和修改您的内容类型,这将决定您的数据在数据库中的三种模式中的哪一种。
如果您使用GUI创建了内容类型,或者使用API创建了自定义代码,则您的网站内容类型和列表内容类型都在数据库中处于“仅数据库”状态。这意味着它正在数据库中查找内容类型的定义。
如果您已在CAML中将内容类型创建为功能,那么您的网站内容类型将被重影(或未定制,因为我们应该在v3中调用它)数据库。这基本上意味着数据库在12-hive中的特征XML中查找构成内容类型的站点列。这应该意味着您可以更新该功能,并且您可以在更新内容类型中使用新的站点列,对吧?
不幸的是不记得:还记得我们还有列表内容类型吗?这里的无聊是这些列表内容类型是使用代码实例化的,因此它们处于“仅数据库”状态。这意味着您的更改只会在您的网站内容类型中看到,而不会在使用该内容类型的现有列表中看到!
有几种方法可以解决此问题,解决方案取决于您的需求以及您正在进行的更改(删除字段,添加字段,更改字段)。
例如,即使内容类型随时间变化,您也经常希望保留现有的项目元数据。如果通过代码推送列表内容类型中的更改,则会丢失存储在已更改/已删除字段中的数据。对此的解决方案是添加基于旧内容类型但具有更改字段的全新内容类型。您可以添加新内容类型(通过代码或使用功能XML)并使用功能接收器或类似功能将新内容类型推广到使用旧内容类型的所有列表,然后将旧内容类型标记为隐藏。这样就可以保留旧的元数据,但不能使用新的元数据以外的方式添加新项目。
如果您可以直接访问生产环境,并且您的客户治理计划允许,则首选此问题的其他答案中提到的方法。与SharePoint中的其他工件一样,建议以结构化方式部署内容类型。以非结构化方式添加新内容类型会影响搜索相关性(托管属性),也可能影响站点的常规分类(站点列不被重用等),因此即使可以直接在生产现场,我不会推荐它!
这引导我进入最后的方法,这是我推荐的方法,至少对于未来的内容类型:使用功能接收器从头开始以编程方式创建内容类型!这样,您始终可以了解内容类型的真实状态(仅限数据库),并且您可以采用结构化方法来管理未来的更改!您可以通过谷歌搜索“创建”内容类型“以编程方式SharePoint”
找到几种方法为了完整性:我提到了三种模式。您的内容类型可以使用的最后一种模式是“UnGhosted”。这意味着您的内容类型是使用功能XML创建的,但它已与12个配置单元中的原始XML源断开连接。
我的朋友SørenNielsen对内容类型有一些好处 在 Audit your Content Type Hierarchy 中。可以在MSDN文章 Updating Content Types 中简要提及上述一些问题。 Gary Lapointe还有一个STSADM扩展,解决了内容类型的一些问题,请参阅 Propagate Content Type Changes 。
很抱歉这个咆哮,但主题很复杂,需要彻底解释,以避免任何误解。
答案 1 :(得分:3)
更新内容类型时,可以单击以更新子内容类型的复选框。通过选中该框,列表内容类型将被更新。
请注意,如果您执行 not 复选框以更新子内容类型,则无法在以后强制进行更新。因此,如果您不进行更新,并且稍后希望子内容类型具有更新,则首先需要撤消更新并使其更新。
.B