获取 Sitecore 项目删除的完整路径

Get full path on Sitecore item delete

使用 Sitecore 8 更新 2

我添加了一些配置和代码以在删除项目时捕获事件。我想获取该项目的完整路径,但我能得到的只是 [orphan]/{itemName} (其中 {itemName}itemName,但它始终包含文字字符串 [orphan] )。

所以我基本上假设在我收到事件时该项目已经被删除并且我无法再获取路径?是否有其他方法可以在项目被删除时获取该项目的路径?

配置:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <events>
      <event name="item:deleted">
        <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemDeleted" patch:before="*[@type='Sitecore.Links.ItemEventHandler, Sitecore.Kernel']" />
      </event>
     </events>
  </sitecore>
</configuration>

代码:

public class SaveItemActions : PublishItemProcessor // Multi purpose class, catches saves, publishes, etc..
{
    protected void OnItemDeleted(object sender, EventArgs args)
    {
        Item item = Event.ExtractParameter(args, 0) as Item;
        if (isValidItem(item))
        {
            ItemActionDAO.Insert(CreateItemAction("Deleted", item), item);
        }
    }
}

您正在绑定到项目被删除后发生的已删除事件。您可能希望在事件模型中更早地进行绑定(例如 'deleting',正如@Marek Musielak 所建议的那样)以获得您需要的信息。

请注意,在删除事件和删除之间可能不会删除项目,因为侦听事件的操作可能会导致删除失败。出于这个原因,请确保您只捕获所需的数据,并仍然监听 deleted 事件以了解项目何时真正被删除。

item:deleting 事件添加新处理程序:

<events>
  <event name="item:deleting">
    <handler type="My.Assembly.Namespace.ItemEventHandler, My.Assembly" method="OnItemDeleting" />
  </event>
</events>

和代码:

public class ItemEventHandler
{
    public void OnItemDeleting(object sender, EventArgs args)
    {
        if (args != null)
        {
            var item = Event.ExtractParameter(args, 0) as Item;
            Assert.IsNotNull(item, "No item in parameters");
            string path = item.Paths.FullPath;

        }
    }
}