我有一个假设性问题(至少现在是这样:))

假设我根据某些自定义内容类型创建列表。我将大约 1000 个项目添加到该列表中(正在生产中)。然后客户来了,他说他需要修改该自定义内容类型。

如果我修改自定义内容类型,列表会发生什么情况?它会自动更新吗(我怀疑)?那么已经创建的列表项又如何呢?

你们中有人有这方面的经验吗?

有帮助吗?

解决方案

关于内容类型的几个问题:

首先,内容类型有两种类型:网站内容类型和列表内容类型。网站内容类型是驻留在库中的“模板”。当在列表中使用网站内容类型时,该内容类型将被实例化为给定列表上的列表内容类型。

其次,您的内容类型可以通过多种方式创建和修改,这将决定您的数据以三种模式中的哪一种出现在数据库中。

如果您使用 GUI 创建了内容类型,或者使用 API 通过自定义代码创建了内容类型,则您的网站内容类型和列表内容类型在数据库中都处于“仅数据库”状态。这意味着它正在数据库中查找内容类型的定义。

如果您已将内容类型创建为功能 CAML, , 你的 地点 内容类型在数据库中是幻影的(或者是未定制的,因为我们在 v3 中应该这样称呼它)。这基本上意味着数据库在 12-hive 中的功能 XML 中查找构成内容类型的网站列。因此,这应该意味着您可以更新该功能,并且您将在更新内容类型中获得新的网站栏,对吧?

不幸的是没有:还记得我们还有列表内容类型吗?令人遗憾的是,这些列表内容类型是使用代码实例化的,因此它们处于“仅数据库”状态。这意味着您的更改只能在您的网站内容类型中看到,而不会在使用该内容类型的现有列表中看到!

有多种方法可以解决此问题,解决方案取决于您的需求以及您正在执行的更改类型(删除字段、添加字段、更改字段)。

例如,您通常希望保留现有的项目元数据,即使内容类型随着时间的推移而变化。如果您通过代码推送列表内容类型中的更改,您将丢失存储在更改/删除字段中的数据。解决方案是在旧内容类型的基础上添加全新的内容类型,但字段已更改。您可以添加新内容类型(通过代码或使用功能 XML),并使用功能接收器或类似功能将新内容类型传播到使用旧内容类型的所有列表,然后将旧内容类型标记为隐藏。这将使得可以保留旧的元数据,但不能使用新元数据以外的其他内容添加新项目。

如果您可以直接访问生产环境,并且您的客户治理计划允许,那么此问题的另一个答案中提到的方法将是首选。然而,与 SharePoint 中的其他工件一样,建议以结构化方式部署内容类型。以非结构化方式添加新的内容类型会影响搜索相关性(托管属性),并且还可能影响网站的一般分类(网站栏不被重用等),因此即使可以直接在生产网站,我不会推荐它!

这使我想到了我推荐的最后一种方法,至少对于未来的内容类型:使用功能接收器从一开始就以编程方式创建您的内容类型!这样您就可以始终了解内容类型的真实状态(仅数据库),并且可以采用结构化方法来管理未来的变化!您可以通过谷歌搜索“以编程方式创建“内容类型”SharePoint”来找到多种方法来执行此操作

为了完整性:我提到了三种模式。您的内容类型可以采用的最后一种模式是“UnGhosted”。这意味着您的内容类型是使用要素 XML 创建的,但它已与 12 配置单元中的原始 XML 源断开连接。

我的朋友索伦-尼尔森(Søren Nielsen)就 "内容类型 "提出了一些很好的观点 于 审核您的内容类型层次结构. 。上面描述的一些问题可以在 MSDN 文章中找到简要提及 更新内容类型。Gary Lapointe 还有一个 STSADM 扩展,可以解决内容类型的一些问题,请参阅 传播内容类型更改.

很抱歉咆哮,但这个主题很复杂,需要彻底的解释以避免任何误解。

其他提示

在更新内容类型有,你可以点击更新子内容类型的复选框。通过检查框的列表内容类型将被更新。

请注意,如果你做的的勾选更新子内容类型,然后有没有办法以后强制更新。因此,如果你不更新,后来想要孩子的内容类型有更新,你首先需要扭转的更新和reaply它。

.B

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top