Sunday, January 10, 2010

Add and Remove List Event Handlers with a Feature in C#

Adding event handlers with C# in a feature is sometimes the only way to go. If you want to add an event handler to a single list instance and not a list or content type you have to add it with C#. The code to add event handlers is pretty straight forward and can be seen below.

    //assembly name of the enevnt handler class 
    string asmName = "EventHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bdfdd9c76bf90bef";
    
    //event handler class
    string eventClass = "EventHandler.EventHandler";

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPWeb web = (SPWeb)properties.Feature.Parent;

        SPList testList = web.Lists["test"]; 

        testList.EventReceivers.Add(SPEventReceiverType.ItemUpdated, asmName, eventClass);
        testList.EventReceivers.Add(SPEventReceiverType.ItemUpdating, asmName, eventClass);
    }


    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        SPWeb web = (SPWeb)properties.Feature.Parent;
        SPList testList = web.Lists["test"];
        Guid eventReceiverGuid = Guid.Empty;

        foreach (SPEventReceiverDefinition receiverDef in testList.EventReceivers)
        {
            if (receiverDef.Assembly == asmName)
            { eventReceiverGuid = receiverDef.Id; }
        }

        if (eventReceiverGuid != Guid.Empty)
        { testList.EventReceivers[eventReceiverGuid].Delete(); }
    }

No comments:

Post a Comment