Recently I worked on application page which updates list item, which in turn causes item update event to fire. The goal was to avoid any event execution. I have done this many times before, but had a hard time recalling. This post is a note to myself, so I know where to look for code sample, if I forgot again. :)
If I am writing event receiver, I can use EventFiringEnabled property to disable events temporarily. But in application page I don’t’ have access to SPEventReceiverBase which exposes this property. So here is the coed I used to temporarily disable event firing.
public class DisableItemEventFiring : SPItemEventReceiver, IDisposable
{
public ItemEventFiring()
{
this.EventFiringEnabled = false;
}
public void Dispose()
{
this.EventFiringEnabled = true;
}
}
Now we have defined class for disabling list item event, I can use this class in application page,
using (DisableItemEventFiring disableEvt = new DisableItemEventFiring ())
{
//no event will be fired
item.SystemUpdate();
}
//event firing enabled again
item.SystemUpdate();
Hope this helps.
-Javed