我们在Sitecore环境中遇到了非常具体的情况。在我们的Sitecore中我们有一个项目,我们称之为“促销”。促销使用共享的“结束日期”字段。
在我们的开发实例中,我们“取消共享”该字段。这自然会触发在非共享模式下将项目更改为使用字段的后台进程。 此处描述了类似的过程:http://sitecoreblog.alexshyba.com/2011/10/changing-field-sharing-settings-in.html 然后,我们在生产“主”数据库上打包并安装了“取消共享字段”的更改。正如我在安装过程中所假设的那样,尚未触发“更新项目”的后台进程。现在行为方式,我们的生产主数据库中的“非共享”字段无法保存。单击保存后的值的“消失”。我相信他们现在正在以某种语言无关的方式得救。
当然,简单的解决方法是“分享”它并再次“取消共享”它。然而,当我们尝试在我们的环境副本上进行这个实验时,我们注意到所有的值都丢失了。由于提到的模板中的项目被大量使用,我们无法承受失去这些价值。
有什么想法吗?
答案 0 :(得分:1)
我会去“挖掘数据库”。 Sitecore将这些字段值存储在“SharedFields”,“VersionedFields”和“UnversionedFields”表中的各自数据库中。
假设您关闭Sitecore实例(这很重要),您应该能够从错误的表中选择数据,并将其插入到正确的表中。
(您需要查找FieldId与您遇到问题的字段匹配的项目)
根据您的描述,我不相信Sitecore已经删除了您生产环境中的任何数据。
答案 1 :(得分:1)
所以我们提出的解决方案是使用Sitecore Rocks工具。在将字段更改为" Share"之前,我们导出了包含字段的所有项目。查询或多或少是这样的:
SELECT @@ID, @#Start Date#, @#End Date# FROM //*[@@templateid='{993DC54F-6724-46C3-B8D2-3EE13F15366A}']
即使项目指向SharedFields表,它也为我们提供了适当的值。我们只是将Excel中此查询的结果(大约9000行)转换为Sitecore Rocks更新查询 -
UPDATE SET @#Start Date#='20120531T000000',@#End Date#='20120614T000000' FROM //* [@@ID='{E3FD9819-3DBD-4FAA-8DEF-FEF2A6272723}'];
准备好此迁移脚本后,我们共享了相应的字段,并通过Sitecore Rocks应用了9000个更新查询的脚本。我们需要在Live数据库上完全相同。一切都很顺利。
我相信可以使用数据库轻松完成相同的方法,但由于非技术原因(安全策略等),此解决方案对我们来说更好。无论如何,Sitecore岩石岩石!