miércoles, 8 de julio de 2009

Showing lists & document libraries folders in SharePoint 2007 breadcrumb

In some SharePoint 2007 default mastarpages, e.g. BlueBand or BlackBand, you'll find that breadcrumb is not showing folders and subfolders inside lists and document libraries, just showing the current site.

That can be solved with SharePoint Designer performing a simple modification in the master page. You only need to follow the next steps:

  1. Open SharePoint Designer and connect to your SharePoint 2007 root site.
  2. Navigate to _catalogs/masterpages.
  3. Open the master page that you want to modify and perform the checkout .
  4. In source view, look for SiteMapPath element and notice that it'll have the property SiteMapProvider="CurrentNavSiteMapProviderNoEncode"
  5. Modify that property and set it to SiteMapProvider="SPContentMapProvider"
  6. Save the master page, perform the checkin and publish it.
With that steps, when you navigate inside the folders and siubfolders of a SharePoint list or document library, breadcrumb will show them helping you to return to a previous folder.

Hope it helps!

Mostrando las carpetas de listas y librerías de documentos en el breadcrumb de SharePoint 2007

En algunas de las Master Pages que vienen por defecto con SharePoint 2007, por ejemplo en la BlueBand o en la BlackBand, nos encontramos con que el breadcrumb puede no funcionar correctamente en algunos casos como cuando nos encontramos dentro de las carpetas y subcarpetas de una lista o librería de documentos, ya que el breadcrumb sólo nos indicará hasta el site en el que nos encontramos.

Esto se puede solucionar con una ligera modificación en las Master Pages utilizando SharePoint Designer, siguiendo los pasos siguientes:

  1. Abrir SharePoint Designer y conectar al site raíz de nuestro SharePoint 2007.
  2. Navegar hasta _catalogs/masterpages.
  3. Abrir la master page que queremos corregir, confirmando que queremos hacer check out.
  4. En la vista de código, buscar el elemento SiteMapPath, que tendrá la propiedad SiteMapProvider="CurrentNavSiteMapProviderNoEncode"
  5. Corregir esta propiedad para que quede como SiteMapProvider="SPContentMapProvider"
  6. Guardar la master page, hacer check in y publicarla.
Con estos pasos, cuando nos encontremos dentro de las carpetas de una lista o librería de documentos nos aparecerán en el breadcrumb, con lo que nos será más fácil navegar dentro de éstas.

Espero que os pueda servir de ayuda.

lunes, 6 de julio de 2009

SharePoint 2007 SP2 Update in a few weeks

Microsoft SharePoint Team Blog has announced that a new version of SharePoint 2007 Service Pack 2 will be released in 4 or 6 weeks. That new version won't cause activation of the trial period of your product.

If you install the current version of SharePoint 2007 SP2, you'll find that your Sharepoint will expire in 180 days. Reenterig the product license or installing the hotfix specially developed for that issue, wich will be included in SP2 new version, wil solve the problem but it's an issue that you need to know if you can't wait to update your SharePoint Farm untill the release of SP2 update.

Regards

Actualización del SP2 de Sharepoint 2007 en unas semanas

El Microsoft SharePoint Team Blog ha anunciado que entre 4 y 6 semanas se publicará una nueva versión del Service Pack 2 de SharePoint 2007 que ya no provocará el problema de la activación del periodo de prueba del producto.

En la versión actual del SP2 de SharePoint hay un error que hace que, en caso de instalarlo, el SharePoint actualizado tenga una validez de 180 días. Reintroducir el código de licencia del producto es suficiente para resolver el problema, aunque también está disponible un hotfix para solucionarlo, que es el que vendrá incluído en la nueva versión del SP2, pero es algo a tener en caso de no poder esperar para instalar el SP2 en vuestras granjas de SharePoint.

Saludos

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