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:
- Añadir una clase en nuestro namespace que herede de SPItemEventReceiver.
- Crear 2 funciones, una que llame a DisableEventFiring() y otra que llame a EnableEventFiring().
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:
Publicar un comentario