我正在运行Sitecore 7.2,而且我绝对无法更改多个项目的DisplayName
。
许多人没有给我任何麻烦,我使用界面更改了他们的名字,他们的新DisplayName立即生效(如我在内容编辑器中看到的那样)。但是,对于一些选定的项目,当我点击" Save"时,更改将被恢复。按钮。
我尝试使用代码更改DisplayName
,但无济于事:
{
using (new SecurityDisabler()) {
item.Editing.BeginEdit();
try {
item.Appearance.DisplayName = newName.Trim();
} catch (Exception e) {
e.Data.Add(<my stuff>);
throw;
} finally {
item.Editing.EndEdit();
}
}
}
同样,新的DisplayName
立即被撤销。可能是因为EndEdit()
上有一个修改项目的触发器?如果是,我该如何仔细检查?
答案 0 :(得分:2)
当Sitecore像这样变得时髦,并且似乎保存一个字段值但显示另一个时,我的经验是,在许多情况下,它归结为字段值SQL表中的“ghost”值。有很多方法可以实现,但如果您有数据库访问权限,则检查它很简单。
尝试:
SELECT *
FROM [your db].[dbo].[VersionedFields]
WHERE ItemId = 'one of your funky items'
AND FieldId = '{B5E02AD9-D56F-4C41-A065-A133DB87BDEB}'
和
SELECT *
FROM [your db].[dbo].[SharedFields]
WHERE ItemId = 'one of your funky items'
AND FieldId = '{B5E02AD9-D56F-4C41-A065-A133DB87BDEB}'
由于__Display Name
既没有版本化也没有共享,因此这些查询都不会出现任何问题。但如果我是对的,那么会有 - 而你应该继续删除这些行。
当自然地直接与Sitecore数据库混淆时,通常的条款和条件适用。之前备份等等。
答案 1 :(得分:1)
另一种可能性是dbo.UnversionedFields中有一个显示名称记录,没有该项目的语言。这会否决所有其他显示名称记录。删除没有语言的记录可以解决问题。
查询以搜索显示名称记录:
SELECT * FROM [dbo].[UnversionedFields] WHERE fieldId = 'B5E02AD9-D56F-4C41-A065-A133DB87BDEB' AND itemId = 'your item ID'
查询删除坏记录:
DELETE FROM [dbo].[UnversionedFields] where ID = 'fieldId to remove'