2011-04-10

How to disabling event firing in SharePoint 2010

Today, I tested whether event receiver fires or not when I use SPListItem's Update methods.
The results are here.


Methods                 event firing
Update()                   fired
SystemUpdate()             fired
SystemUpdate(false)        fired
UpdateOverwriteVersion()   fired

All methods fired !!

But I think people sometimes want not to fire a event receiver when a update method is used.
So, I would like to introduce how to disable event firing.


In SharePoint 2010, SPEventReceiverBase.DisableEventFiring Method and SPEventReceiverBase.EnableEventFiring Method are already obsolete. We need to use EventFiringEnabled Property.



A sample code is here.

private void button1_Click(object sender, EventArgs e)
{
    const string siteUrl = "http://sp2010";
    SPSite site = new SPSite(siteUrl);
    SPWeb web = site.RootWeb;

    SPList list = web.Lists["Announcements"];
    SPListItem item = list.Items[3];

    HandleEventFiring handleEventFiring = new HandleEventFiring();
    handleEventFiring.DisableHandleEventFiring();

    try
    {
        item.Update();
    }
    finally
    {
        handleEventFiring.EnableHandleEventFiring();
    }
}

public class HandleEventFiring : SPItemEventReceiver
{

    public void DisableHandleEventFiring()
    {
        //obsolete
        //this.DisableEventFiring();
        this.EventFiringEnabled = false;
    }

    public void EnableHandleEventFiring()
    {
        //obsotete
        //this.EnableEventFiring();
        this.EventFiringEnabled = true;
    }
}



This summer, I plan to go forest hiking.


2 comments:

  1. Thanks dude. your solution save a lot of my time.

    ReplyDelete
  2. Awesome! Was thinking of doing some multiple inheritance through interface, but doing it this way is just neat!

    ReplyDelete