2017-01-23 3 views
1

Arbeiten mit Sitecore 8 Update 2Vollständigen Pfad auf Sitecore-Element löschen

Ich habe einige Konfigurationen und den Code hinzugefügt, um das Ereignis zu erfassen, wenn ein Element gelöscht wird. Ich möchte den vollständigen Pfad des Elements abrufen, aber alles, was ich bekommen kann, ist [orphan]/{itemName} ({itemName} ist die itemName, aber es enthält immer die literale Zeichenfolge [orphan]).

Also nehme ich an, dass zu dem Zeitpunkt, zu dem ich das Event bekomme, das Item bereits gelöscht wurde und ich den Pfad nicht mehr bekommen kann? Gibt es eine andere Möglichkeit, den Pfad eines Elements zu erhalten, während es gelöscht wird?

Konfiguration:

<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> 

Code:

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

Haben Sie versucht, 'Artikel: deleting' Event? –

Antwort

2

Sie sind mit der gelöschten Ereignisbindung, die geschieht, nachdem der Artikel gelöscht wurde. Wahrscheinlich möchten Sie früher im Ereignismodell binden (z. B. "Löschen", wie von @Marek Musielak vorgeschlagen), um die benötigten Informationen zu erhalten.

Beachten Sie, dass es möglich ist, dass ein Element zwischen dem Löschen des Ereignisses und dem Löschen nicht gelöscht wird, da eine Aktion, die das Ereignis überwacht, das Löschen fehlschlagen lässt. Stellen Sie daher sicher, dass Sie nur die Daten erfassen, die Sie benötigen, und dass Sie immer noch auf das gelöschte Ereignis hören, um zu wissen, wann das Element tatsächlich gelöscht wurde.

3

Hinzufügen neuer Handler item:deleting Ereignis:

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

Und Code:

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

Es scheint, dass ich diese Lösung brauche. Aber wenn ich mich nicht irre, kann der Löschvorgang immer noch abgebrochen werden, nachdem mein benutzerdefinierter Code von anderen Handlern ausgeführt wurde? Wenn ja, würde ich auch einen Weg brauchen, dies zu erfassen. EDIT: Ich habe die 2 kombiniert wie Jay vorgeschlagen. Speichern Sie die ID und den Pfad in einem Stati-Dictionary für das Lösch-Ereignis und holen Sie es für das gelöschte Ereignis. – Timon

+0

Sie können es auch in Sitecore.Context.Items speichern, das nur für die Dauer der Ausführung der Anforderung/Ereignispipeline aktiv ist. – haliphax

Verwandte Themen