2017-01-23 77 views
1

使用Sitecore 8更新2获取Sitecore项目删除的完整路径

我已经添加了一些配置和代码来捕获项目被删除时的事件。我想获得该项目的完整路径,但所有我能得到的是[orphan]/{itemName}(其中{itemName}itemName,但它总是包含文字串[orphan])。

所以我假设bassicaly通过我得到的事件时该项目已被删除,我无法再获取路径?有没有其他方式可以在物品被删除时获取物品的路径?

配置:

<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); 
     } 
    } 
} 
+1

你试过'项目:deleting'事件? –

回答

2

你要绑定到已删除的事件,发生后该项目已被删除。你可能想在前面的事件模型结合(如“删除”,由@Marek的Musielak的建议),以获得您所需要的信息。

注意,有可能以不删除事件之间被删除,删除,因为听完事件的动作可能会导致删除失败的项目。出于这个原因,确保你只拍摄需要,仍然听删除的事件,知道什么时候该项目实际上已删除的数据。

3

添加新的处理程序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; 

     } 
    } 
} 
+0

看来我确实需要这个解决方案。但是,如果我没有弄错,删除过程仍然可以在我的自定义代码由其他处理程序运行后中止?如果是这样,我还需要一种方法来捕捉这个。 编辑:我已经结合2作为杰伊建议。将标识和路径保存在关于删除事件的stati词典中,并在删除的事件中获取它。 – Timon

+0

您也可以将其保存到Sitecore.Context.Items,它只在请求/事件管道执行期间存在。 – haliphax