miércoles, 10 de junio de 2009

Evitando la ejecución de eventos en SharePoint desde cualquier código

La ejecución de eventos nos puede dar problemas en determinados escenarios o para hacer pruebas concretas, por ejemplo sobre una lista determinada. Aunque existen las funciones DisableEventFiring() y EnableEventFiring(), éstas sólo se pueden invocar desde un SPItemEventReceiver, lo que hace que tengamos que ir a la lista, desactivar los eventos, realizar las pruebas y volver a asociarle los eventos, con los riesgos que ello conlleva ya que podemos dejar la lista en un estado diferente al inicial.

Una solución es hacer que se puedan desactivar y activar los eventos desde cualquier código, para ello tenemos que hacer lo siguiente:

  1. Añadir una clase en nuestro namespace que herede de SPItemEventReceiver.
  2. Crear 2 funciones, una que llame a DisableEventFiring() y otra que llame a EnableEventFiring().
Con esto ya podemos crear una instancia de esta clase en la clase principal de nuestro programa y utilizar nuestras funciones, de forma que nos quedaría algo parecido a esto:

namespace MyNamespace
{
public class MyEventFiring : SPItemEventReceiver
{
public MyEventFiring()
{
}

public void MyDisableEventFiring()
{
this.DisableEventFiring();
}

public void MyEnableEventFiring()
{
this.EnableEventFiring();
}
}

public class MyClass
{
//...
MyEventFiring mef = new MyEventFiring();
mef.MyDisableEventFiring();
item.Update(); //Este Update se podrá hacer sin que ningún evento interfiera
mef.MyEnableEventFiring();
//...
}
}

No hay comentarios: