无法更改项目的显示名称,为什么?

Unable to change Display Name of item, why?

我是 运行 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()上有修改item的触发器?如果是,我该如何仔细检查?

当 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 数据库时,通常的条款和条件自然适用。之前备份等等。

另一种可能是 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'