我最近注意到2个环境(源和目标)之间的Sitecore模板字段的项目ID存在差异。因此,使用模板对dataitem的字段值的任何数据更改都不会反映到目标Sitecore数据库。
因此,我们手动将值从源复制到目标,这需要花费大量时间来同步2个环境。知道如何更改Sitecore中的模板字段Item Id而不会在目标实例中丢失数据吗?
由于
答案 0 :(得分:3)
模板字段很可能是在不同的服务器上手动创建的,正如@AdrianIorgu所建议的那样。我建议您不要担心合并字段和工具。
您真正关心的是您网站的PRODUCTION实例上的内容(假设这是Target)。在任何其他环境中,内容都应该被视为一次性。
考虑到这一点,请从PRODUCTION实例创建模板包,并在其他环境中安装,从Source实例中删除重复字段。现在,该字段的GUID应该适用于所有环境。将其检入您的源代码管理中(使用TDS或Unicorn或其他)。然后,您可以正确更新任何标准值,并在再次部署时通过服务器反映出来。
如果您的其他环境(dev / qa / pre-prod)导致该字段的数据丢失,请不要担心,请从PROD恢复备份。
答案 1 :(得分:1)
最有可能发生这种情况是因为在第二个环境中手动添加了字段或模板,而没有使用包,序列化或第三方工具(如TDS或Unicorn)迁移项目。
正如上面提到的@SitecoreClimber,您可以使用Razl同步两个环境并查看差异,但我认为您无法更改字段的GUID,以使两个环境保持一致,而不会丢失任何数据。根据您的数据量,修复此问题可能会非常棘手。
我会做什么:
警告:下面的SQL查询只是一个让您入门的示例,请确保在CD实例上运行之前对其进行正确扩展和测试
use YOUR_DATABASE
begin tran
Declare @oldFieldId nvarchar(100), @newFieldId nvarchar(100), @previousValue nvarchar(100), @newValue nvarchar(100)
set @oldFieldID = '75577384-3C97-45DA-A847-81B00500E250' //old field ID
set @newFieldID = 'A2F96461-DE33-4CC6-B758-D5183676509B' //new field ID
/* versionedFields */
Select itemId, fieldid, value
from [dbo].[versionedFields] f with (nolock)
where f.FieldId like @oldFieldID
答案 2 :(得分:0)
对于这种东西我鼓励你使用Sitecore Razl。
这是一个用于比较和合并sitecore数据库的工具。
Razl允许开发人员在两个Sitecore数据库之间进行完整的并排比较;突出显示缺少或不是最新的功能。 Razl还使开发人员能够将项目从一个数据库移动到另一个数据库。
无论是找到一个丢失的模板,移动整个数据库还是只移动一个项目,Razl都可以让您无缝地完成任务并且无忧无虑。 这不是一个免费的工具,你可以在这里查看如何购买它: