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);
}
}
}
}
Vous avez '>' dans la définition de méthode de gestionnaire: 'method = "OnItemDeleted>"' –
Et même avec '" OnVersionAdded> "' et 'method =" OnVersionRemoved> "' –
> _
Timon