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

时间:2015-04-24 14:26:06

标签: sitecore

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

2 个答案:

答案 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'