2017-01-23 4 views
1

削除取得します。私はアイテムのフルパスを取得したいのですが、私が得ることができるのは[orphan]/{itemName}です({itemName}itemNameですが、常にリテラルストリング[orphan]が含まれています)。サイトコア項目の完全なパスがサイトコア8アップデート私はいくつかの設定項目が削除されたときにイベントをキャプチャするためにコードを追加した2</p> <p>での作業

だから私は、イベントが発生した時点でそのアイテムは既に削除されており、もはやパスを取得できないという基本的なことを前提としていますか?削除されているアイテムのパスを取得する別の方法はありますか?

構成:

<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を組み合わせている。 idiとパスをstati辞書に保存して、イベントを削除し、削除したイベントでフェッチする。 – Timon

+0

Sitecore.Context.Itemsに保存することもできます。これはリクエスト/イベントパイプラインの実行中のみ有効です。 – haliphax

関連する問題