viernes, 3 de septiembre de 2010

Localizar variaciones de sitio automáticamente en SharePoint 2010 (I)

Aquellos que trabajamos habitualmente con portales de publicación multilenguaje en SharePoint sabemos el dolor que han causado, desde siempre, las variaciones de sitio. Automatizar el proceso ha sido siempre algo complejo y delicado, llegando al punto de tener que invocar un método privado para crear las jerarquías de contenido cuando trabajábamos con MOSS.

Con la aparición de SharePoint 2010 el asunto ha mejorado bastante, siendo necesario únicamente ejecutar un trabajo del temporizador de manera programática, haciendo uso únicamente de elementos públicos de la API del producto. De todas maneras, si es que quieres hacer un despliegue totalmente automático de un portal en varios idiomas tienes que tener muchas cosas en cuenta. Para empezar, tienes que asegurarte de que tu definición de sitio esté totalmente localizada en aquellos puntos en que se pueda. También tienes que asegurarte de utilizar siempre direcciones relativas para propiedades que hagan referencia a urls, como por ejemplo en los elementos web de consulta de contenido. Evidentemente tienes que disponer de todos y cada uno de los archivos de recurso para los idiomas que estás desplegando.

En estos momentos estoy trabajando en la creación de una característica que, si sigues las buenas prácticas de creación de definiciones de sitio, y si sigues unas pocas convenciones en cuanto a nomenclatura, permita realizar estas tareas automáticamente. Cómo ya tenía algo así para MOSS no está resultando demasiado complicado pero, como era de esperar, hay alguna diferencia a tener en cuenta entre las dos versiones del producto. Una de estas diferencias es la manera en que se realizan las traducciones de los nombres de los sitios. En MOSS utilizábamos algo similar a lo siguiente:

scope.Title = newTitle;
scope.Update();

Mientras que en SharePoint 2010 tenemos que hacerlo de la siguiente manera:

SPUserResource resource = scope.TitleResource;
resource.SetValueForUICulture(scope.Locale, newTitle);
scope.Title = newTitle;
scope.Update();

No es un gran cambio, pero hay que tenerlo en cuenta.

En un futuro artículo hablaré de cómo invocar el trabajo del temporizador que crea las jerarquías de contenidos y poder así desplegar portales multilenguaje de manera automática.

0 comentarios: