2017-01-23 69 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