2016-12-22 7 views
1

私はSitecore 8 Update 2を使用しています。 Sitecoreの項目(作成、保存、削除、公開など)に関する情報を収集したかったのです。特定のSitecoreイベントにハンドラを追加できません

これを達成するために、それぞれのイベントで複数のイベントハンドラを設定しました。すべてのsitecoreイベントは、設定 - > sitecore - > eventsの下のconfigにあります。

ここでは、 "item:added"、 "item:saved"、 "publish:complete"などのイベントにハンドラ(SaveItemActions.configを参照)を追加できました。これらのイベントハンドラは、新しいクラス(SaveItemActions.cs)のそれぞれのメソッドを指すようになりました。

残念ながら、私はハンドラを「アイテム:created」、「item:deleted」、「item:versionAdded」および「item:versionRemoved」に追加できませんでした。

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

しかし、私は、彼らはすでにサイトコアが提供するハンドラを持っているようaswellこれらのイベントにハンドラを追加することができるはずのように思えます。 /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> 

私はSitecore.Links.ItemEventHandler(下記参照)を見てSitecore.Kernel.dllを逆コンパイルし、それについて特別な何かを見つけることができませんでした。

これを引き起こす原因が分かっていたり、フィードバックがありましたら、お気軽にお問い合わせください。

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

あなたは '>'ハンドラメソッドの定義内の持っている: ''メソッド= "OnItemDeleted>" –

+0

と 'と同じように" OnVersionAdded> "と' method = "OnVersionRemoved>" ' –

+0

> _ <まあ、見たことがありませんでした。それを指摘してくれてありがとう – Timon

答えて

2

あなたのコードは大丈夫です。それはまさにそれが書かれているはずのものです。

唯一の問題は、設定のタイプミスです。あなたは、あなたのハンドラの3(例えばmethod="OnItemDeleted>")のためmethod属性に余分な>文字を持っている:

<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>" /> 
関連する問題