miércoles, 10 de junio de 2009

Disable SharePoint Event Firing from any source code

Sometimes we may be interested in disable events to perform some tests or processes but we're only able to execute DisableEventFiring() and EnableEventFiring() functions from a SPItemEventReceiver.

A possible solution is disable and enable event firing from any source code. To do that, you can follow the next steps:

  1. Add a new class in your namespace which inherits from SPItemEventReceiver.
  2. Create 2 functions in that new class to call EnableEventFiring() and DisableEventFiring().
Now, we can create an instance of that class in our main program class and will be able to use our functions to enable and disable events. The code should be like this:
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(); //This Update can be executed withou event firings
mef.MyEnableEventFiring();
//...
}
}

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();
//...
}
}

domingo, 30 de noviembre de 2008

Adjuntos en custom list forms de SharePoint Designer

Cuando hagamos un custom list form desde SharePoint Designer nos podemos encontrar con que los adjuntos de estos formularios dejan de funcionar.
Esto tiene solución siguiendo el artículo
http://support.microsoft.com/kb/953271 de la Knowledge Base de Microsoft.

Según el artículo, hay que tener actualizado el SharePoint con la Infrastructure Update. Esto es muy importante ya que sin esta actualización, aunque hagamos las sustituciones de código que propone el artículo, los adjuntos seguirán sin funcionar.

He testeado esta solución en diferentes entornos y ha funcionado perfectamente así que, si tenéis problemas con los adjuntos en vuestros formularios hechos en SharePoint Designer, no dudéis en seguir los pasos que en se indican.

viernes, 31 de octubre de 2008

MOSS 2007 y el modificador 3GB del boot.ini

Hola,

En uno de los proyectos en los que he estado trabajando se activó en el servidor de SharePoint el modificador /PAE del boot.ini, acompañado del modificador /3GB para aprovechar toda la memoria de que disponía el servidor.

A priori todo parecía funcionar correctamente hasta que al cabo de un tiempo empezamos a notar un extraño comportamiento: los archivos adjuntos de listas y document libraries no siempre se abrían correctamente, provocando un error 404 (Page Not Found).

Después de investigar un poco más el rendimiento del servidor con mis compañeros, descubrimos que se quedaba sin entradas libres en la tabla de páginas y, en ese momento, se empezaba a dar esa situación.

La solución a este problema la encontramos en http://support.microsoft.com/kb/823440 dónde se explica que, en caso de activar el modificador /3GB, hay unos ciertos valores recomendados en el modificador /USERVA. Seguimos estas indicaciones, reiniciamos el servidor y se solucionó.


Si algún día tenéis la necesidad de modificar el boot.ini, en http://support.microsoft.com/kb/317526 tenéis los pasos a seguir.

Espero que os sea de utilidad!

domingo, 31 de agosto de 2008

Error HRESULT 0x80040E14 al aprobar items de listas de SharePoint 2007

Al aprobar ítems de listas de SharePoint puedes encontrarte con el error HRESULT 0x80040E14.

A falta de una investigación más exhaustiva, los primero que se debe verificar y que suele ser la causa del error es la activación del versionado en la lista.
Para ello, simplemente hay que acceder a la configuración de la lista y, en "configuración de versiones", poner la opción "¿Desea crear una versión cada vez que edite un elemento de esta lista?" en no.

De todas formas hay que seguir investigando soluciones (se admiten comentarios) ya que si volvemos a activar la creación de versiones en la lista volveremos a tener el mismo problema.

Espero que os sirva de ayuda.