viernes, 29 de mayo de 2009

Bitácora de una migración SharePoint 2007

SharePoint tiene un API para migrar contenido efectivo y poderoso. Dentro del ensamblado Microsoft.SharePoint.dll y debajo de el espacio de nombres Microsoft.SharePoint.Deployment se encuentras las clases principales de esta API; SPExport y SPImport. Estas clases junto con otras mas encapsulan la interface para realizar una migración de contenido exitosa.

Un vistazo realista

Dado el API para la migración el problema o la solución mas bien es de estrategia que de herramienta. No estamos en un mundo perfecto encontraremos problemas en el camino, especialmente cuando se trate de contenido. Pero la estrategia que sigamos nos dará la victoria o la derrota. Cuando inicie su proceso de migración olvídese en pensar que va a migrarlo todo absolutamente todo de una sola vez, no funciona así, entre tanto estemos hablando de cerca de los 10 Gb. de información esto por lo menos sugiere un centenar de sitios con n cantidad de librerías y documentos, páginas, elementos web, enlaces, cientos de usuarios, listas, columnas, flujos de trabajo, y demás contenido de los portales.

Qué herramienta utilizar?

Si esta evaluando otras alternativas dentro de SharePoint, no pierda mas el tiempo esta API fue diseñada para realizar dicha tarea. Otras alternativas solo le acarrearan complicaciones innecesarias y poco efectivas. No me refiero a productos de terceros que hay muy buenos y también caros, sino a posibles caminos que pudiera pensar fuesen efectivos, como Web Services, SharePoint Designer, comando de línea stsadm.exe o por último la interface de SharePoint Server 2007 para copiar contenido conocida como el sitemanager.aspx. Si se trata de migrar contenido masivo y es en distintos servidores o aplicaciones Web, no hay sino esta API diseñada para tal propósito.

La Herramienta

La buena noticia es que ya hubo alguien que hizo una herramienta y que es gratuita, y mi experiencia con ella no ha sido sino gratificante y exitosa. No soluciona todos los problemas pero en un porcentaje significativo estimo 85% el contenido es migrado, y no porque la herramienta no sea efectiva porque se basa en la API de SharePoint, sino porque hay problemas siempre con el contenido, especialmente cuando este proviene de una migración de WSS 2.0, y no sean practicado las mejores prácticas en la administración de contenido.

La herramienta puede bajarla en el sitio codeplex en esta dirección:

http://www.codeplex.com/SPDeploymentWizard

Hay una versión Release 1.1. La que recomiendo. La versión 2.0 que esta en beta en el momento que escribí esta publicación, requiere que usted instale el Framework 3.5 en el servidor de SharePoint, y esto puede se un tema importante a considerar. Lo que no hace la versión 1.1 que es un ejecutable que usted ejecuta desde cada servidor donde realizará la exportación e importación. Las mejoras incluidas en la versión 2.0 son para integración continua para hacer instalaciones de contenido silenciosas en ambientes de desarrollo preferentemente. Allí no habrá problema de reiniciar el servidor por la instalación del Framework 3.5, no así en el caso de ambientes de producción.

Escenario:

Necesito migrar mas de 7 Gb de contenido de un servidor de SharePoint a otro. No estoy forzado a migrar exactamente la misma estructura porque es sobre un portal que tiene una organización diferente. La estructura de permisos es muy sencilla; hay sitios principales que tienen administradores de contenido asociados. Cada administrador agrupará a los usuarios en permisos basados en los niveles de permiso estándar de SharePoint, Lectores, colaboradores y administradores.

Solución:

Utilizaré la herramienta de migración SPDeploymentWizard para migrar el contenido. Para ello se creará de primero la estructura nueva de sitios en el servidor destino y se migrará el contenido por áreas, Una a la vez revisando que el contenido y las funcionalidades del antiguo sitio estén presentes en el nuevo sitio. Ya que utilizaremos esta herramienta describiremos el procedimiento y cada opción de la misma.

Preparación para la migración

Disponga de espacio en disco

Debe de disponer espacio en disco en el disco del sistema operativo, como el base de datos. Cuanto, la cantidad de espacio que va a migrar debe de estar libre en ambos ambientes, y el mismo espacio para la ubicación donde creará el archivo comprimido o cmp. El espacio en el sistema operativo es necesario ya que crea archivos temporales para comprimir el contenido que creará.

Preparar el ambiente de pruebas

Para de planificación deberá contemplar un ambiente de pruebas. Estoy ayudará a anticipar con los problemas que se toparán en la migración. Como archivos con error, Elementos Web no encontrados, y permitirá tomar decisiones sobre soluciones alternas sin afectar la información que se encuentra en producción.

Bosquejo de la estructura de Sitios

Antes de realizar la migración haga un bosquejo de donde se ubicaran en el sitio destino el contenido de la fuente, esto es esencial cuando se escoge no retener los ID de los objetos y re-emparentar el contenido a importar.

Colaboración de los usuarios para verificar contenido

Esto es sumamente importante, esto en realidad dará el éxito al proyecto de migración o el rechazo total. Deberá coordinarse con los usuarios involucrados que representan cada porción del contenido, para poder validar efectivamente si el contenido paso satisfactoriamente. Asegúrese que tenga a los líderes o personas que manejan el contenido para no darse sorpresas futuras que sean irreversibles.

Archivos con extensión “cmp”

Algo que debe de saber sobre estos archivos comprimirán la información y creará varios archivos no mayor en promedio de 32 Mb.

El lenguaje del contenido

Deberá verificar que el lenguaje del producto con que se instaló SharePoint en ambos servidores origen y destino, sea el mismo. Ya que no se puede migrar contenido en un lenguaje distinto al servidor destino. Esta no es una limitación del API de Migración de SharePoint, sino de toda la plataforma de SharePoint en sí.

Pasos Generales

1) Exporte el contenido y verifique los errores y advertencias.

2) Impórtelo, revise la bitácora y verifique los errores y advertencias.

3) Revíselo navegando sobre los sitios importados y si encuentra errores vaya resolviéndolos uno a uno.

Lo que no incluye

  • Los elementos web personalizados (debe de incluirlos manualmente usted antes de realizar la importación del contenido)
  • Las características dependientes del contenido a exportar (debe de instalarlas y activarlas manualmente antes de realizar la importación del contenido)
  • Las bitácoras, historial de los flujos de trabajo, y timer jobs. Si desea mas información vea la referencia al final del artículo.

Consejos prácticos y advertencias

Importación sin retención de los ID de los objetos

Cuando no retiene los Id de los objetos en la importación cuidado de no duplicar el contenido, esto le acarrea problemas. Para evitar esto revise el sitio antes de importar y luego si ya lo migro y desea volverlo a migrar, borre el contenido anterior.

Empiece de poco en poco.

Cuando es mucho el contenido, el proceso se convierte en largo y probablemente acarreará muchos problemas, para aislarlos, empiece luego de planificado la ubicación del contenido empiece con sub-sitios asilando los errores y encontrará que algunos no reportan ningún error, esto le dará mas confianza y paciencia para continuar con la tarea, que no es sencilla, ni rápida, en los casos cuando es un contenido extenso.

El Procedimiento

Introducción

El procedimiento ser realizará con la versión Release 1.1 , aunque ya esta en Beta la versión 2.0, lo que me gusta de la versión 1.1 es que podemos copiar el archivo SPDeploymentWizard.exe acompañado de su archivos de configuración (SPDeploymentWizard.exe.config) y listo no necesitamos instalar nada. Que es de agradecer que sea así en un servidor y mas aún en un ambiente Productivo.

Este ejecutable debe de correr en los servidores origen y destino en el momento que se realiza cada uno de los correspondientes procesos, Exportación e Importación.

La Exportación:

1) Bueno una vez copiado este asistente en el servidor destino ejecútelo y le mostrará una imagen parecida a la de abajo. Para continuar presione el botón [Next] (Es importante ejecutarlos con la cuenta de administrador de la colección de sitios de la aplicación web para que no tenga ningún limitación del contenido que desea leer para crear el comprimido de exportación).

1-VentanaInicial

2) Seleccione la opción Export y luego escriba la dirección URL del servidor donde esta instalada la aplicación Web que desea migrar el contenido. Ojo con el puerto puede no ser el 80 que como predeterminado no es necesario indicarlo. Para continuar presione el botón [Next], como se muestra en la imagen de abajo.

2 - Export - Nombre Server

3) Le mostrará el contenido de la aplicación Web seleccionada del servidor de SharePoint origen. Navegue sobre el contenido seleccionado con clic derecho lo que desea exportar incluyendo o excluyendo descendientes. Para eliminar algún elemento seleccionado de la lista del contenido seleccionado, haga clic derecho sobre el elemento y seleccione la opción [Remove]. Para continuar presione el botón [Next].

3 - Seleccione el contenido

4) Configuración de la exportación. Seleccione las opciones mas convenientes. Sugerencia: Excluya los objetos dependientes, no incluya la seguridad y escriba un nombre que le indique el contenido a exportar. Para continuar presione el botón [Next].

image

5) Presione el botón [Finish] y al finalizar el proceso de compresión y creación de los archivos. Presione el botón [Ok].

5 - Ejecute el proceso de Exportación

6) Le mostrará una bitácora del proceso realizado. Verifique si no tiene errores. Por los avisos de advertencia (o warnings) no se preocupe mucho, solo tome nota y revise cuando ya ha importado el contenido que creo en la exportación. Al final del archivo le mostrará el total de errores encontrados y de avisos de advertencia.

9 - Revisión de Bitácora de Importación

La Importación:

1) En el servidor destino, copie el ejecutable de la herramienta, SPDeploymentWizard.exe y su archivo de configuración SPDeploymentWizard.exe.config. Luego ejecútelo y le mostrará la página de bienvenida. Presione el botón [Next]

2) Seleccione la opción de Importación. En la casilla Site URL, escriba el nombre de la aplicación Web donde copiará el contenido (Si escribe http: le mostrará las aplicaciones Web que están instaladas en el servidor). En la casilla Import Web URL coloque la dirección absoluta o relativa donde esta ubicará el contenido a Importar (Mire la imagen y sigua los consejos que describo allí). Para continuar presione el botón [Next].

6- Iniciando la Importación

3) Configuración de la Importación. Si la exportación generó mas de un archivo seleccione la opción [From multiple files] y seleccione donde esta ubicado los archivos del contenido con el botón [Browse…], escriba el nombre base de los archivos comprimidos (normalmente es el nombre del archivo que no tiene un número al final). No seleccione la opción de retener el ID (Abajo la explicación). La opción importante a continuación es la casilla de selección multiple [User info update] Import All, esto actualizará el usuario que creo y modifico cada elemento así como la fecha y la hora. Presione el botón [Next] para continuar:

image

Retain objects IDs and locations:Si elige la retención de ID de los objetos necesitará crear en el sitio destino la misma estructura que tiene en el fuente, ya que no se puede re-emparentar con esta opción habilitada. Si desea mayor libertad como es el caso de ejemplo de esta publicación, deberá tener cuidado del contenido que importa ya que puede duplicar el contenido.

4) Presione el botón [Finish]. Dependiendo del volumen del contenido así se demorará. Cuando finaliza el proceso le mostrará el mensaje que aparece abajo. Presione el botón [Ok].

8 - Ejecutar la importación

5) Le mostrará una bitácora del proceso realizado. Verifique si no tiene errores. Por los avisos de advertencia (o warnings) no se preocupe mucho, solo tome nota y revise el contenido importado. Al final del archivo le mostrará el total de errores encontrados y de avisos de advertencia.

9 - Revisión de Bitácora de Importación

Eso es todo, espero haya terminado con éxito el proceso. Lea las recomendaciones y demás referencias para estar seguro de lo que esta haciendo.

Mensaje de Advertencia en al Exportación

Si le muestra el siguiente mensaje al final del archivo de bitácora:

[5/5/2009 6:43:25 PM]: Completed with 10 warnings.
[5/5/2009 6:43:25 PM]: Completed with 0 errors.

Y la advertencia es la siguiente:

[5/5/2009 6:38:11 PM]: Warning: A Web Part or Web Form Control type could not be found, or is not registered as safe. The Web Part will still be exported.

No se preocupe mucho, lo que le esta indicando es que no fue registrado el elemento web como seguro en el archivo de configuración, pero que de todos modos lo incluirá en el archivo de exportación.

Mensaje de Error en la Importación

Si le da el siguiente error:

[5/6/2009 8:57:22 AM]: Error: Failure writing to target file

Muy probablemente no tiene disponible espacio en disco en el sistema operativo donde el API de SharePoint crea los archivos temporales para comprimir el contenido. Puede cambiar la ubicación predeterminada de los archivos temporales aunque no lo recomiendo ya que no solo afecta la migración sino cualquier proceso del sistema operativo. Además debe de reiniciar el Servidor para que estos cambios tengan efecto. Si esta interesado este es el enlace: http://blogs.technet.com/stefan_gossner/archive/2008/04/11/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-6.aspx

Referencia recomendada: Esto ayudará a comprender cada una de las opciones seleccionadas y lo que sucede detrás bastidores.

http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx

Hasta la próxima y buena suerte, que la va a necesitar!, recuerde empiece de poco en poco…

Manolo Herrera

miércoles, 27 de mayo de 2009

Tip del día: Evaluando el valor nulo de un campo “Lookup” en SharePoint 2007

Algo que puede acarrearnos diferentes resultados es cuando evaluamos la nulidad de un campo “Lookup” o “Búsqueda” (para los que gustan de la versión en español de SharePoint).

Una practica común para las listas de SharePoint cuando deseamos crear una jerarquía de valores es utilizar un campo circular que haga referencia a la misma tabla. Bueno siempre el primer nivel será el elemento raíz y el valor será nulo o eso por lo menos esperamos.

Ahora bien, veamos como se comporta SharePoint. Cuando se crea un elemento de la lista el valor efectivamente es nulo. Pero cuando se modifica el elemento de la lista,cualquier campo distinto al que nos interesa que se mantenga nulo, como es normal en el comportamiento de los sistemas, todos los campos aunque no se modifiquen se actualizan…el problema es que el campo que dejamos nulo ahora SharePoint le agrego el formato de los campos Lookup “;#”, y por si fuera poco un cero “0;#” (las comías son solo para enmarcar el valor).

Por lo que la próxima vez que necesite evaluar el valor de un campo “Lookup” recuerde agregar esta condición y se vea algo así:

   1:  if (string.IsNullOrEmpty(Padre)  Padre == "0;#")


   2:  {  


   3:   ...


   4:  }






Padre es un campo “Lookup” de la misma tabla al que pertenece el campo.



Code4Fun!,



Manolo Herrera

sábado, 23 de mayo de 2009

Importante problema detectado en el SP2 para SharePoint Server 2007 y Project Server 2007

El Jueves 21 de mayo del 2008, el equipo de SharePoint en su blog anunció que el SP2 activa la expiración del producto en 180 días.

Ya están trabajando en un hotfix, para arreglarlo. Por el momento hay una forma de resolverlo manualmente: http://support.microsoft.com/default.aspx/kb/971620

El artículo completo esta aquí: http://blogs.msdn.com/sharepoint/archive/2009/05/21/attention-important-information-on-service-pack-2.aspx

Esperemos no tener otras inesperada sorpresa en el SP2. La mejor recomendación será hagan la instalación en un ambiente de pruebas como una máquina virtual y pruébenlo exhaustivamente. Porque molestarte, al parecer hay importantes correcciones para SharePoint y Project Server que valen la pena. Cuando lo haya probado les ofrezco escribir mi experiencia.

Nos vemos!,

Manolo Herrera

martes, 19 de mayo de 2009

La diferencia entre Timephased y Non-Timephased en Project Server 2007

Una pregunta que se hace a menudo cuando se esta analizando los cubos de información de Project Server que significa o que representa este termino. Una imagen puede decir mas que 1000 palabra como la de abajo:

image

Si observamos, los proyectos, tareas, asignaciones, y recursos representan el tiempo planificado, planeado, calendarizado relacionados a los proyectos.

Por otro lado el termino Non-timephased, representa el tiempo que no es calendarizado como regular en el cronograma de los proyectos, como lo son: problemas, riesgos, entregables y las hojas de tiempo que representa todo el tiempo administrativo que no es de algún proyecto como lo es: visitas al médico, tareas de urgencia, vacaciones, etc.

Bueno espero haber aclarado algo, algún amigo lector.

Hasta la próxima,

Manolo Herrera

miércoles, 13 de mayo de 2009

WSPBuilder, Could not load file or assembly CabLib

Si esta corriendo sobre 32 bits, y te da este error es porque predeterminadamente el instalador coloca la versión de 64 bits en el directorio donde esta WSPBuilder.

Solución:

Copia el dll de 32 bits en el mismo directorio donde esta WSPBuilder.exe. Este se encuentre en C:\Program Files\WSPTools\WSPBuilderExtensions\Resources\x86 .

Y esto es todo debería darte como resultado algo parecido como esto:

========== Build: 11 succeeded, 0 failed, 1 up-to-date, 0 skipped WSPBuilder
Version: 0.9.8.1029
Created by Carsten Keutmann
GPL License 2007
Building the solution - please wait
Saving the Manifest.xml file
Creating the WSP file
Cleanup
Done!

Hasta la próxima,

Manolo Herrera

lunes, 11 de mayo de 2009

Como instalar varios idiomas para revisar ortografía en Windows Live Writer Build 14.0.

Uno de mis “hobbies” es publicar contenido técnico y utilizo Windows Live Writer para dicha tarea. Me tope recientemente que reinstale mi portátil y sin percatarme instalé la versión en inglés de este producto, pero como mi audiencia es en español mi interesaba tener el revisor de ortografía en español, y porque no el de inglés también que en el área de tecnología utilizamos muchos términos del habla inglesa.

Bueno sin buscar demasiado y dando una solución rápida al problema, reinstala sobre la versión en inglés la de español y dispuse de ambos diccionarios a la vez.

Busque la librería de idiomas pero no las encontré por ninguna parte, además, no debería gastar tanto tiempo en buscarlas.

Espero alguien le sirva mi sentido común!. :)

Manolo Herrera

Error en SharePoint en un trabajo de migración de Contenido: The change Token refers to a time before the start of the current change log

Una de las razones mas comunes por las cuales da este error se debe ha que esta desactualizado el “Token” porque ha pasado mucho tiempo sin actualizar el sitio destino, muy probablemente porque no ha sufrido cambio alguno, el sitio origen, y el valor predeterminado de validez es de 15 días. Esto puede cambiarse pero deberá pensar que el archivo de bitácora crecerá y requerirá de mayor espacio.

Más información podrá encontrar en el blog de Stefan Gossner. Abajo la referencia:

http://blogs.technet.com/stefan_gossner/archive/2008/03/13/moss-common-issue-incremental-deployment-fails-with-the-changetoken-refers-to-a-time-before-the-start-of-the-current-change-log.aspx

Solución práctica encontrada fue:

1) Modificar el Trabajo para que fuese un actualización “full” o Completa. (Central Adminsitration, Operations, Content Deployment)

2) Ejecutarla en el mejor momento.

3) Luego modificar nuevamente el trabajo para que se realice parcial.

4) Haga una cambio en el sitio origen.

5) Ejecute el trabajo nuevamente para verificar que ya no tenga errores.

Hasta la próxima,

Manolo Herrera

viernes, 8 de mayo de 2009

Bitácora de Restauración de Base de datos de Ejemplo para Demo de Project Server 2007

Para los interesado en preparar una demostración de Project Server 2007, sin necesidad de bajar la máquina virtual completa ( que es mas pesada). Puede bajar las bases de datos en el sitio de Codeplex: http://code.msdn.microsoft.com/PS2007SampleDB . Lo que no nos dicen los muchachos es como restaurarlas, por ellos este artículo. Así que les dejo con el procedimiento para realizar con éxito la restauración:

1) Restauración de Base de Datos: WSS_content, ProjectServer_Draft, ProjectServer_Published, ProjectServer_Archive, ProjectServer_Reporting, con los nombres predeterminados, recomendado.

2) Instalación de Project Server 2007 Versión en Inglés. Instalación Avanzada y Completa

3) Levantar el servicio de Project Server Application, y de Search.

4) Crear la aplicación en el puerto 80. Esta conectará el nombre de base de datos wss_content restaurada con el portal de project server PWA.

5) Crear el Proveedor de Servicios Compartidos. Dentro de Application Management, seleccione la opción Create or Configure farm’s Shared Services.

image

6) Haga clic sobre New SSP

image

7) Cree una nueva aplicación Web para la administración de el proveedor de servicios compartidos (por razones de brevedad no incluiré los pasos para crear una aplicación, solo seleccione el enlace y como decimos por mi tierra, siga el camino).

image

8) Coloque la cuenta de administrador del servidor y su clave. Por ultimo presione el botón Ok.

image

6) Una vez creado seleccione la opción Project Web Access Sites para crear la interfase de usuario de Project Server conocida como PWA.

image

7) Seleccione la Aplicación predeterminada (El puerto 80). Coloque el nombre predeterminado de la interfase PWA. Si utilizó los nombres predeterminados para las base de datos restaurados no hay mas que hacer, presione aceptar y listo.

Create Web Access Site Part 1Create Web Access Site Part 2

7) La base de datos wss_content trae una colección de sitios instalada llamada litware, pero necesita agregar el el administrador de colecciones ya que trae el usuario de la demostración donde fueron extraídas por lo que debe de cambiarlo. Para ello vaya al Central Administration, en Application Management, Site Collection Administrators. Coloque el usuario administrador y presione el botón Ok.

Site Collection Administrators

Eso es todo amigos. No funcionarán algunas páginas del contenido de sitios,pero esto es porque no tenemos los elementos web de la demostración. Pero toda la información de Proyectos si esta disponible. La sección de Data Analysis esta renombrada como Project Report Center. Tendrá algunas complicaciones para que funcione el control Activex que muestra los cubos, pero será de configurar el IE habilitando las opciones que trae deshabilitadas el IE predeterminados, y con eso debería funcionar. Buena suerte con esto último.

Hasta la próxima,

Manolo Herrera

Desarrollando tu propia Framework para SharePoint – Decisiones de Arquitectura

Hace algún tiempo me dispuse a iniciar mi propia Framework para agilizar el desarrollo en SharePoint. Ya luego de iniciar este proyecto, y de revisar patrones de diseño, compartir comentarios con colegas y revisando la guía desarrollo de SharePoint de los amigos de P&P. He decido compartir mis pensamientos en este proceso de desarrollo del proyecto para armar mi propia Framework.

Mi Motivación:

  1. Verdadera reutilización del código a nivel de configuración. Con Unity
  2. Desarrollar componentes desacoplados y agruparlos en módulos. Una idea tomada de la Entlib 4.1. Aquí la refrencia: http://msdn.microsoft.com/en-us/library/dd203213.aspx
  3. Abstracción del API de SharePoint del dominio que me estoy enfocando. Metodología a utilizar para esta tarea TDD ayudado con TypeMock (Estoy preparando un artículo sobre ello)
  4. Integración Continua para el desarrollo e instalación de la solución. Busco poder automatizar todos los proceso de Pruebas Unitarias, “Deployment” de la solución para SharePoint (Como: Elementos Web, Flujos de trabajo, Event Receiver a través de WSPBuilder) y el contenido con el Asistente de Deployment que utiliza la API de SharePoint de Deployment

Patrones de diseño y Arquitectura de la solución:

  • Patrón MVP (Model-View-Presenter) estoy me ayudará a separar la vista de la lógica de presentación y realizar las pruebas unitarias correspondientes
  • Patrón Facade para facilitar el acceso a cada modulo
  • Patrón Wrapper para encapsular y abstraer el API de SharePoint de la lógica de negocios
  • Patrón de Inyección de Dependencia, para ello utilizaré como contenedor de IoC Unity de la Entlib 4.1 así mismo utilizaré los bloques de aplicación como Logging, Validation, Injector como módulos transversales dentro de la solución
  • Arquitectura en Capas hasta el momento ha demostrado tener un gran éxito en la separación de “concerns
  • Entidades de negocio en vez de objetos de SharePoint. Estos son mas ligeros y abstraemos cualquier proveedor de almacenamiento como lo es SharePoint o Base de datos. Ambos utilizados en soluciones de portales

image

Bueno hasta aquí la primera publicación de varias que continuarán, espero evolucionar el diseño y llevar a feliz terminó todos los objetivos planteados. La culminación de este proyecto será depositar el proyecto completo en el sitio de CodePlex.

Hasta la próxima, espere muy pronto, y recuerde Code4Fun!,

Manolo Herrera

miércoles, 6 de mayo de 2009

Presentación y Códigos de Ejemplo de los bloques de aplicación de la EntLib 4.1 de p&p

Para los amigos que asistieron a la presentación el pasado mes de abril del 2009 o interesados sobre la presentación en español sobre la Microsoft Enterprise Library 4.1. de los amigos de P&P y el código de ejemplo

La presentación se basa en los bloques de aplicación de la Entlib 4.1, de Logging, Validating, Manage Exceptions y Intercerptor o implementación de AOP en la Entlib 4.1. Todos los ejemplos utilizan Unity como IoC de demostración y como parte de la Entlib 4.1

Podrán bajarla en:

EntiLib4.1 Skydrive folder

Code4Fun,

Manolo Herrera

martes, 5 de mayo de 2009

Bitácora de una migración SharePoint 2007

SharePoint tiene un API para migrar contenido efectivo y poderoso. Dentro del ensamblado Microsoft.SharePoint.dll y debajo de el espacio de nombres Microsoft.SharePoint.Deployment se encuentras las clases principales de esta API; SPExport y SPImport. Estas clases junto con otras mas encapsulan la interface para realizar una migración de contenido exitosa.

Un vistazo realista

Dado el API para la migración el problema o la solución mas bien es de estrategia que de herramienta. No estamos en un mundo perfecto encontraremos problemas en el camino, especialmente cuando se trate de contenido. Pero la estrategia que sigamos nos dará la victoria o la derrota. Cuando inicie su proceso de migración olvídese en pensar que va a migrarlo todo absolutamente todo de una sola vez, no funciona así, entre tanto estemos hablando de cerca de los 10 Gb. de información esto por lo menos sugiere un centenar de sitios con n cantidad de librerías y documentos, páginas, elementos web, enlaces, cientos de usuarios, listas, columnas, flujos de trabajo, y demás contenido de los portales.

Qué herramienta utilizar?

Si esta evaluando otras alternativas dentro de SharePoint, no pierda mas el tiempo esta API fue diseñada para realizar dicha tarea. Otras alternativas solo le acarrearan complicaciones innecesarias y poco efectivas. No me refiero a productos de terceros que hay muy buenos y también caros, sino a posibles caminos que pudiera pensar fuesen efectivos, como Web Services, SharePoint Designer, comando de línea stsadm.exe o por último la interface de SharePoint Server 2007 para copiar contenido conocida como el sitemanager.aspx. Si se trata de migrar contenido masivo y es en distintos servidores o aplicaciones Web, no hay sino esta API diseñada para tal propósito.

La Herramienta

La buena noticia es que ya hubo alguien que hizo una herramienta y que es gratuita, y mi experiencia con ella no ha sido sino gratificante y exitosa. No soluciona todos los problemas pero en un porcentaje significativo estimo 85% el contenido es migrado, y no porque la herramienta no sea efectiva porque se basa en la API de SharePoint, sino porque hay problemas siempre con el contenido, especialmente cuando este proviene de una migración de WSS 2.0, y no sean practicado las mejores prácticas en la administración de contenido.

La herramienta puede bajarla en el sitio codeplex en esta dirección:

http://www.codeplex.com/SPDeploymentWizard

Hay una versión Release 1.1. La que recomiendo. La versión 2.0 que esta en beta en el momento que escribí esta publicación, requiere que usted instale el Framework 3.5 en el servidor de SharePoint, y esto puede se un tema importante a considerar. Lo que no hace la versión 1.1 que es un ejecutable que usted ejecuta desde cada servidor donde realizará la exportación e importación. Las mejoras incluidas en la versión 2.0 son para integración continua para hacer instalaciones de contenido silenciosas en ambientes de desarrollo preferentemente. Allí no habrá problema de reiniciar el servidor por la instalación del Framework 3.5, no así en el caso de ambientes de producción.

Escenario:

Necesito migrar mas de 7 Gb de contenido de un servidor de SharePoint a otro. No estoy forzado a migrar exactamente la misma estructura porque es sobre un portal que tiene una organización diferente. La estructura de permisos es muy sencilla; hay sitios principales que tienen administradores de contenido asociados. Cada administrador agrupará a los usuarios en permisos basados en los niveles de permiso estándar de SharePoint, Lectores, colaboradores y administradores.

Solución:

Utilizaré la herramienta de migración SPDeploymentWizard para migrar el contenido. Para ello se creará de primero la estructura nueva de sitios en el servidor destino y se migrará el contenido por áreas, Una a la vez revisando que el contenido y las funcionalidades del antiguo sitio estén presentes en el nuevo sitio. Ya que utilizaremos esta herramienta describiremos el procedimiento y cada opción de la misma.

Preparación para la migración

Disponga de espacio en disco

Debe de disponer espacio en disco en el disco del sistema operativo, como el base de datos. Cuanto, la cantidad de espacio que va a migrar debe de estar libre en ambos ambientes, y el mismo espacio para la ubicación donde creará el archivo comprimido o cmp. El espacio en el sistema operativo es necesario ya que crea archivos temporales para comprimir el contenido que creará.

Preparar el ambiente de pruebas

Para de planificación deberá contemplar un ambiente de pruebas. Estoy ayudará a anticipar con los problemas que se toparán en la migración. Como archivos con error, Elementos Web no encontrados, y permitirá tomar decisiones sobre soluciones alternas sin afectar la información que se encuentra en producción.

Bosquejo de la estructura de Sitios

Antes de realizar la migración haga un bosquejo de donde se ubicaran en el sitio destino el contenido de la fuente, esto es esencial cuando se escoge no retener los ID de los objetos y re-emparentar el contenido a importar.

Colaboración de los usuarios para verificar contenido

Esto es sumamente importante, esto en realidad dará el éxito al proyecto de migración o el rechazo total. Deberá coordinarse con los usuarios involucrados que representan cada porción del contenido, para poder validar efectivamente si el contenido paso satisfactoriamente. Asegúrese que tenga a los líderes o personas que manejan el contenido para no darse sorpresas futuras que sean irreversibles.

Archivos con extensión “cmp”

Algo que debe de saber sobre estos archivos comprimirán la información y creará varios archivos no mayor en promedio de 32 Mb.

El lenguaje del contenido

Deberá verificar que el lenguaje del producto con que se instaló SharePoint en ambos servidores origen y destino, sea el mismo. Ya que no se puede migrar contenido en un lenguaje distinto al servidor destino. Esta no es una limitación del API de Migración de SharePoint, sino de toda la plataforma de SharePoint en sí.

Pasos Generales

1) Exporte el contenido y verifique los errores y advertencias.

2) Impórtelo, revise la bitácora y verifique los errores y advertencias.

3) Revíselo navegando sobre los sitios importados y si encuentra errores vaya resolviéndolos uno a uno.

Lo que no incluye

  • Los elementos web personalizados (debe de incluirlos manualmente usted antes de realizar la importación del contenido)
  • Las características dependientes del contenido a exportar (debe de instalarlas y activarlas manualmente antes de realizar la importación del contenido)
  • Las bitácoras, historial de los flujos de trabajo, y timer jobs. Si desea mas información vea la referencia al final del artículo.

Consejos prácticos y advertencias

Importación sin retención de los ID de los objetos

Cuando no retiene los Id de los objetos en la importación cuidado de no duplicar el contenido, esto le acarrea problemas. Para evitar esto revise el sitio antes de importar y luego si ya lo migro y desea volverlo a migrar, borre el contenido anterior.

Empiece de poco en poco.

Cuando es mucho el contenido, el proceso se convierte en largo y probablemente acarreará muchos problemas, para aislarlos, empiece luego de planificado la ubicación del contenido empiece con sub-sitios asilando los errores y encontrará que algunos no reportan ningún error, esto le dará mas confianza y paciencia para continuar con la tarea, que no es sencilla, ni rápida, en los casos cuando es un contenido extenso.

El Procedimiento

Introducción

El procedimiento ser realizará con la versión Release 1.1 , aunque ya esta en Beta la versión 2.0, lo que me gusta de la versión 1.1 es que podemos copiar el archivo SPDeploymentWizard.exe acompañado de su archivos de configuración (SPDeploymentWizard.exe.config) y listo no necesitamos instalar nada. Que es de agradecer que sea así en un servidor y mas aún en un ambiente Productivo.

Este ejecutable debe de correr en los servidores origen y destino en el momento que se realiza cada uno de los correspondientes procesos, Exportación e Importación.

La Exportación:

1) Bueno una vez copiado este asistente en el servidor destino ejecútelo y le mostrará una imagen parecida a la de abajo. Para continuar presione el botón [Next] (Es importante ejecutarlos con la cuenta de administrador de la colección de sitios de la aplicación web para que no tenga ningún limitación del contenido que desea leer para crear el comprimido de exportación).

1-VentanaInicial

2) Seleccione la opción Export y luego escriba la dirección URL del servidor donde esta instalada la aplicación Web que desea migrar el contenido. Ojo con el puerto puede no ser el 80 que como predeterminado no es necesario indicarlo. Para continuar presione el botón [Next], como se muestra en la imagen de abajo.

2 - Export - Nombre Server

3) Le mostrará el contenido de la aplicación Web seleccionada del servidor de SharePoint origen. Navegue sobre el contenido seleccionado con clic derecho lo que desea exportar incluyendo o excluyendo descendientes. Para eliminar algún elemento seleccionado de la lista del contenido seleccionado, haga clic derecho sobre el elemento y seleccione la opción [Remove]. Para continuar presione el botón [Next].

3 - Seleccione el contenido

4) Configuración de la exportación. Seleccione las opciones mas convenientes. Sugerencia: Excluya los objetos dependientes, no incluya la seguridad y escriba un nombre que le indique el contenido a exportar. Para continuar presione el botón [Next].

image

5) Presione el botón [Finish] y al finalizar el proceso de compresión y creación de los archivos. Presione el botón [Ok].

5 - Ejecute el proceso de Exportación

6) Le mostrará una bitácora del proceso realizado. Verifique si no tiene errores. Por los avisos de advertencia (o warnings) no se preocupe mucho, solo tome nota y revise cuando ya ha importado el contenido que creo en la exportación. Al final del archivo le mostrará el total de errores encontrados y de avisos de advertencia.

9 - Revisión de Bitácora de Importación

La Importación:

1) En el servidor destino, copie el ejecutable de la herramienta, SPDeploymentWizard.exe y su archivo de configuración SPDeploymentWizard.exe.config. Luego ejecútelo y le mostrará la página de bienvenida. Presione el botón [Next]

2) Seleccione la opción de Importación. En la casilla Site URL, escriba el nombre de la aplicación Web donde copiará el contenido (Si escribe http: le mostrará las aplicaciones Web que están instaladas en el servidor). En la casilla Import Web URL coloque la dirección absoluta o relativa donde esta ubicará el contenido a Importar (Mire la imagen y sigua los consejos que describo allí). Para continuar presione el botón [Next].

6- Iniciando la Importación

3) Configuración de la Importación. Si la exportación generó mas de un archivo seleccione la opción [From multiple files] y seleccione donde esta ubicado los archivos del contenido con el botón [Browse…], escriba el nombre base de los archivos comprimidos (normalmente es el nombre del archivo que no tiene un número al final). No seleccione la opción de retener el ID (Abajo la explicación). La opción importante a continuación es la casilla de selección multiple [User info update] Import All, esto actualizará el usuario que creo y modifico cada elemento así como la fecha y la hora. Presione el botón [Next] para continuar:

image

Retain objects IDs and locations:Si elige la retención de ID de los objetos necesitará crear en el sitio destino la misma estructura que tiene en el fuente, ya que no se puede re-emparentar con esta opción habilitada. Si desea mayor libertad como es el caso de ejemplo de esta publicación, deberá tener cuidado del contenido que importa ya que puede duplicar el contenido.

4) Presione el botón [Finish]. Dependiendo del volumen del contenido así se demorará. Cuando finaliza el proceso le mostrará el mensaje que aparece abajo. Presione el botón [Ok].

8 - Ejecutar la importación

5) Le mostrará una bitácora del proceso realizado. Verifique si no tiene errores. Por los avisos de advertencia (o warnings) no se preocupe mucho, solo tome nota y revise el contenido importado. Al final del archivo le mostrará el total de errores encontrados y de avisos de advertencia.

9 - Revisión de Bitácora de Importación

Eso es todo, espero haya terminado con éxito el proceso. Lea las recomendaciones y demás referencias para estar seguro de lo que esta haciendo.

Mensaje de Advertencia en al Exportación

Si le muestra el siguiente mensaje al final del archivo de bitácora:

[5/5/2009 6:43:25 PM]: Completed with 10 warnings.
[5/5/2009 6:43:25 PM]: Completed with 0 errors.

Y la advertencia es la siguiente:

[5/5/2009 6:38:11 PM]: Warning: A Web Part or Web Form Control type could not be found, or is not registered as safe. The Web Part will still be exported.

No se preocupe mucho, lo que le esta indicando es que no fue registrado el elemento web como seguro en el archivo de configuración, pero que de todos modos lo incluirá en el archivo de exportación.

Mensaje de Error en la Importación

Si le da el siguiente error:

[5/6/2009 8:57:22 AM]: Error: Failure writing to target file

Muy probablemente no tiene disponible espacio en disco en el sistema operativo donde el API de SharePoint crea los archivos temporales para comprimir el contenido. Puede cambiar la ubicación predeterminada de los archivos temporales aunque no lo recomiendo ya que no solo afecta la migración sino cualquier proceso del sistema operativo. Además debe de reiniciar el Servidor para que estos cambios tengan efecto. Si esta interesado este es el enlace: http://blogs.technet.com/stefan_gossner/archive/2008/04/11/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-6.aspx

Referencia recomendada: Esto ayudará a comprender cada una de las opciones seleccionadas y lo que sucede detrás bastidores.

http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx

Hasta la próxima y buena suerte, que la va a necesitar!, recuerde empiece de poco en poco…

Manolo Herrera

lunes, 4 de mayo de 2009

Tip del día:Como saber la versión de SharePoint 2007 que tengo instalada

Una pregunta común y fácil de responder. Conéctese al servidor donde esta instalado SharePoint 2007, Ejecute la aplicación Web Central Administration SharePoint 3.0 que esta dentro de Microsoft Office Server, en todos los programas del menú de Windows Server. Y luego en Operaciones, Servidores del conjunto. Allí le mostrará la versión de SharePoint que esta instalada, como lo muestra la imagen de abajo:

image

Si desea conocer que incluye la versión instalada. Vea de referencia este blog: http://www.mindsharpblogs.com/penny/articles/481.aspx

Hasta la próxima,

Manolo Herrera