2016-12-22 1 views
1

Je travaille avec Sitecore 8 Update 2. Je voulais collecter des informations sur ce qui arrive aux éléments Sitecore (créés, enregistrés, supprimés, publiés, ...). Pour y parvenir, je suis allé configurer plusieurs Eventhandlers avec leur événement respectif. Tous les événements sitecore se trouvent dans la configuration sous configuration -> sitecore -> events.Impossible d'ajouter des gestionnaires à certains événements Sitecore

Ici, j'ai pu ajouter des gestionnaires (voir SaveItemActions.config) à des événements tels que "item: added", "item: saved" et "publish: complete". Ces gestionnaires d'événements pointent maintenant leurs méthodes respectives dans ma nouvelle classe (SaveItemActions.cs).

Malheureusement, je n'ai pas pu ajouter un gestionnaire à "item: created", "item: deleted", "item: versionAdded" et "item: versionRemoved" car je me retrouve avec l'erreur suivante après l'ajout.

Could not instantiate event handler. Type: Sitecore.Links.ItemEventHandler. Method: OnItemDeleted> (method: Sitecore.Events.Event.GetConfigSubscribers()). 

Mais il semble que je devrais pouvoir ajouter des gestionnaires à ces événements aswell comme ils l'ont déjà fournis par les gestionnaires Sitecore. Par exemple à partir /sitecore/admin/showconfix.aspx:

<event name="item:deleted"> 
    <handler type="Sitecore.Links.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted"/> 
    <handler type="Sitecore.Tasks.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted"/> 
    <handler type="Sitecore.Globalization.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted"/> 
    <handler type="Sitecore.Data.Fields.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted"/> 
    <handler type="Sitecore.Rules.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted"/> 
    <handler type="Sitecore.Caching.Placeholders.PlaceholderCacheManager, Sitecore.Kernel" method="UpdateCaches"/> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemDeleted>" patch:source="SaveItemActions.config"/> 
    <handler type="Sitecore.Modules.EmailCampaign.Core.RootItemEventHandler, Sitecore.EmailCampaign" method="OnRootDeleted" patch:source="Sitecore.EmailExperience.ContentManagement.config"/> 
</event> 

Je décompilé Sitecore.Kernel.dll regarder Sitecore.Links.ItemEventHandler (voir ci-dessous) et ne pouvait pas trouver quelque chose de spécial à ce sujet.

Si quelqu'un sait ce qui cause cela ou a un quelconque type de réaction, n'hésitez pas à me le faire savoir.

SaveItemActions.config

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <events> 

    <event name="item:added"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemAdded" /> 
    </event> 

    <!-- event name="item:created"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemCreated>" /> 
    </event--> 

    <event name="item:saved"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemSaved" /> 
    </event> 

    <event name="publish:complete"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnItemPublished" /> 
    </event> 

    <!-- event name="item:deleted"> 
    <handler type="Sitecore.Links.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted>" /> 
    </event--> 

    <!-- event name="item:versionAdded"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnVersionAdded>" /> 
    </event--> 

    <!-- event name="item:versionRemoved"> 
    <handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnVersionRemoved>" /> 
    </event--> 

    </events> 
</sitecore> 
</configuration> 

SaveItemActions.cs

using Sitecore.Data.Items; 
using Sitecore.Events; 
using Sitecore.Pipelines.Save; 
using Sitecore.Publishing.Pipelines.PublishItem; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace be.absi.kbs.web.Helpers.Processors 
{ 
    public class SaveItemActions 
    { 
     public void OnItemSaved(object sender, EventArgs args) 
     { 
      // Extract the item from the event Arguments 
      Item savedItem = Event.ExtractParameter(args, 0) as Item; 
     } 

     public void OnItemAdded(object sender, EventArgs args) 
     { 

     } 

     public void OnItemCreated(object sender, EventArgs args) 
     { 

     } 

     public void OnItemPublished(object sender, EventArgs args) 
     { 

     } 

     public void OnItemDeleted(object sender, EventArgs args) 
     { 

     } 

     public void OnVersionAdded(object sender, EventArgs args) 
     { 

     } 

     public void OnVersionRemoved(object sender, EventArgs args) 
     { 

     } 
    } 
} 

ItemEventHandler.cs

namespace Sitecore.Links 
{ 
    public class ItemEventHandler 
    { 
     /* 
     Bunch of other methods.... 
     */ 

     protected void OnItemDeleted(object sender, EventArgs args) 
     { 
      if (args == null) 
      { 
       return; 
      } 
      if (!Settings.LinkDatabase.UpdateDuringPublish && PublishHelper.IsPublishing()) 
      { 
       return; 
      } 
      Item item = Event.ExtractParameter(args, 0) as Item; 
      Assert.IsNotNull(item, "No item in parameters"); 
      LinkDatabase linkDatabase = ItemEventHandler.LinkDatabase; 
      if (linkDatabase != null) 
      { 
       linkDatabase.RemoveReferences(item); 
      } 
     } 
    } 
} 
+2

Vous avez '>' dans la définition de méthode de gestionnaire: 'method = "OnItemDeleted>"' –

+0

Et même avec '" OnVersionAdded> "' et 'method =" OnVersionRemoved> "' –

+0

> _ Timon

Répondre

2

Tout votre code est ok. C'est exactement comme ça que ça doit être écrit.

Le seul problème sont les fautes de frappe dans votre configuration. Vous avez des caractères > supplémentaires dans method attributs pour 3 de vos gestionnaires (par exemple method="OnItemDeleted>"):

<handler type="Sitecore.Links.ItemEventHandler, Sitecore.Kernel" method="OnItemDeleted>" /> 
<handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnVersionAdded>" /> 
<handler type="be.absi.kbs.web.Helpers.Processors.SaveItemActions, be.absi.kbs.web" method="OnVersionRemoved>" />