每当添加项目时,Sitecore都会添加几个孤立项目

每当添加项目时,Sitecore都会添加几个孤立项目,sitecore,sitecore6,orphan,Sitecore,Sitecore6,Orphan,在我的Sitecore 6.1.0安装中,我通过实现自己的自定义处理程序(在Web.config中)钩住了“item:added”事件: 添加项时第一次调用该方法时,args参数中的项是正确的项。如果项目的名称为ItItemName,则FullPath属性如下所示: /sitecore/content/theItemName [orphan]/sitecore/content/theItemName 除第一次外,每次项目看起来都是正确的,但项目的路径如下所示: /sitecore/conte

在我的Sitecore 6.1.0安装中,我通过实现自己的自定义处理程序(在Web.config中)钩住了“item:added”事件:

添加项时第一次调用该方法时,
args
参数中的项是正确的项。如果项目的名称为
ItItemName
,则FullPath属性如下所示:

/sitecore/content/theItemName
[orphan]/sitecore/content/theItemName
除第一次外,每次项目看起来都是正确的,但项目的路径如下所示:

/sitecore/content/theItemName
[orphan]/sitecore/content/theItemName

为什么要将[孤立]位添加到完整路径上?即使我只添加了一项,为什么要多次调用OneMaded方法?

我相信类似这样的事件存在已知问题,即方法将被调用多次。我知道我有过类似的经历,在创建项目时,我试图通过编程为项目创建一个角色:

我似乎记得Sitecore有时会多次触发某些事件,所以您可能需要检查[…]

然后,John提供了一个名为

在我的代码中,我进行了一项检查,以查看我正在查找的操作是否已经发生,例如,项目的角色是否存在。在您的情况下,在方法中检查这一点可能有点困难。也许你可以做一些鬼鬼祟祟的事,比如:

protected void OnItemAdded(object obj, EventArgs args) {
  Item item = // code to extract item from args, I forgot it

  if(item.Paths.FullPath.StartsWith("/sitecore/content")) {
    // do your stuff because you know its the first time the event fired
  }
}

再说一次,这是非常刻薄的。如果Sitecore支持无法提供任何更好的选项(或者堆栈溢出上没有更好的选项),我会说这是最后的选择。

在这种情况下,我会考虑创建一个命令模板(源自Sitecore自己的创建项),并在其中添加强制唯一名称功能

额外的好处是,如果名称不是唯一的,那么项目将永远不会被创建


参考:

我也遇到过同样的问题,看起来问题与代理项目有关

我会添加一个项目,然后得到许多[孤立]路径,创建的每个项目都有不同的id

关闭代理项会停止正在创建的[孤立]项

编辑-发现阴影表已损坏, 截断主数据库中的Shadows表,并截断core中的Links数据库,然后重建Links数据库。
我得到了46条孤儿记录,这些记录中的项目本来不打算在其上设置代理项目。

这太奇怪了。可能使用support.sitecore.net创建一个票证。