Exportar ítems de listas de SharePoint 2007 a SharePoint 2010

Antes de desarrollar algo como lo descrito en el título de esta entrada, vale la pena darle un vistazo a las soluciones y herramientas ofrecidas por terceros. Personalmente hemos probado un par de herramientas, pero presentaron algunos problemas para el escenario específico de nuestro cliente y no resolvieron los problemas del todo. Obviamente estas herramientas son aprovechables durante su periodo trial, pero luego de eso deben pagarse unos cuantos dólares para poder seguir utilizándolas. Dejamos los enlaces para que antes de nada ustedes puedan probarlas también:
Luego de revisadas las dos aplicaciones, nos decidimos por construir la nuestra, una aplicación de Windows Forms, construida sobre .NET Framework 3.5, utilizando Visual Studio .NET 2010. La razón más clara, era que necesitábamos exportar varias listas de un sitio de SharePoint Server 2007 a SharePoint Foundation 2010, y algunas personalizaciones de los ambientes nos causaron dificultades con las herramientas que ya hemos comentado. Así que la mejor opción era construir una propia. La ventaja, podíamos personalizar lo que quisiéramos, siendo los dueños del código fuente. El tiempo de desarrollo ha sido corto, lo cual resultó ser mucho más económico que querer adquirir algunas de las dos opciones anteriores, y que obviamente no podríamos crecer en funcionalidad en el caso de ser necesario. No estamos desmeritando las opciones de terceros, pero sí mostrando que podemos crear nuestras propias herramientas de productividad, sin un esfuerzo aparentemente tan grande. Lo realmente importante, y que se debe destacar es lo valioso que es el modelo de objetos de SharePoint, bien sea con el modelo de objetos del lado del servidor, o los servicios web provistos por la plataforma en sus diferentes versiones.
Nuestra solución frente a las dos herramientas revisadas es limitada, y efectivamente las otras llevan ya mucho tiempo en el mercado y con varias versiones por encima de la nuestra, así que estamos hablando de una solución fácil de manejar, sin tantas configuraciones y opciones, pero que cumple con su objetivo, que es mover ítems de listas entre granjas de SharePoint, más sus adjuntos, de un sitio de SharePoint 2007 a un sitio en SharePoint 2010.

Exportar

La imagen anterior muestra la interfaz de la aplicación y el funcionamiento de la misma:
  • En la columna izquierda están las opciones de configuración que se requieren para conectarse al sitio SharePoint que sirve como fuente de información. Esta solución hace uso de servicios Web para conectarse al sitio fuente por esa razón lo primero que se requiere es la ruta al servicio ASMX ofrecido por SharePoint: http://aortizp/_vti_bin/Lists.asmx AORTIZP es un site collection creado en MOSS 2007.
  • Luego de eso se requiere una cuenta con privilegios para poder autenticar a las solicitudes del servicio Web por tal razón  es que le pasamos un usuario, password y dominio. En código esos valores se pasan como credenciales al servicio Web así:
 WebService.Lists listService = new WebService.Lists();  
 listService.Credentials = new System.Net.NetworkCredential(connection.User, connection.Password, connection.Dominio);  
Donde WebService es el nombre de la referencia que se ha configurado en Visual Studio 2010. El objeto connection es de tipo TGConnection, una clase personalizada de tipo entidad que sirve para pasar los valores de conexión del servicio.
 public class TGConnection  
 {  
      private string user;  
      public string User  
      {  
           get { return user; }  
           set { user = value; }  
      }  
      private string password;  
      public string Password  
      {  
           get { return password; }  
           set { password = value; }  
      }  
      private string dominio;  
      public string Dominio  
      {  
           get { return dominio; }  
           set { dominio = value; }  
      }  
 }  
  • Luego en la imagen anterior se observa que se carga el listado de Listas disponibles en el sitio, lo cual se puede llevar a cabo de la siguiente manera:
 listService.Url = connection.UrlSource;  
 XmlNode result = listService.GetListCollection();  
 foreach (XmlNode ndField in result.ChildNodes)  
 {  
      if (ndField.Attributes["ID"] != null)  
      {  
           list = new TGList();  
           list.Id = new Guid(ndField.Attributes["ID"].Value);  
           list.Name = ndField.Attributes["Title"].Value;  
           lists.Add(list);  
      }  
 }  
El código anterior muestra el uso de un método web del servicio Web que permite obtener la colección de listas disponibles en el sitio GetListCollection(). La clase TGList, es una clase personalizada de tipo Entidad que permite almacenar la información de cada lista devuelta por el servicio, específicamente su ID y su Nombre.
  • Luego de tener el listado de Listas, se debe seleccionar la lista que se quiere exportar y en ese momento se cargan las vistas disponibles en esa lista, que sirven como el mecanismo para consultar los ítems. Si no hay ninguna vista o alguna personalización específica, lo recomendable sería escoger la vista pro defecto de Todos los Ítems, ya que así se estaría exportando todo lo que exista en la Lista. El código para obtener las vistas es similar al siguiente:
 Views.Views viewService = new Views.Views();  
 viewService.Credentials = new System.Net.NetworkCredential(connection.User, connection.Password, connection.Dominio);  
 viewService.Url = connection.UrlSource.Replace("Lists.asmx", "Views.asmx");  
 XmlNode result = viewService.GetViewCollection(listName);  
 foreach (XmlNode ndField in result.ChildNodes)  
 {  
      if (ndField.Attributes["Name"] != null)  
      {  
           view = new TGList();  
           view.Id = new Guid(ndField.Attributes["Name"].Value);  
           view.Name = ndField.Attributes["DisplayName"].Value;  
           views.Add(view);  
      }  
 }  
Se debe tener en cuenta que el servicio Web que consulta las vistas es otro http://aortizp/vallas/_vti_bin/Views.asmx
  • Con la vista seleccionada se puede apreciar un campo que permite definir la consulta CAML que se ejecuta para obtener la información, en este caso es:
 <Where><IsNotNull><FieldRef Name='ID' /></IsNotNull></Where>  
El CAML anterior está indicando que se obtienen todos los ítems cuyo ID es diferente de NULL. Esto asegura que se obtengan todos los ítems de la lista.
  • Al hacer clic en el botón Consultar Campos, lo que se obtiene son todas las columnas disponibles en la lista, y de las cuales se deben seleccionar las que se quiere exportar información, tal como se muestra en la imagen anterior.
  • Luego de seleccionar los campos, para este ejemplo las columnas Título, Cuerpo, Fecha de creación, el Autor y los Adjuntos, específicamente de una lista de Anuncios llamada Announcements, se debe hacer clic en el botón Agregar Campos, para que la herramienta automáticamente arme una consulta CAML que se requiere para iniciar la exportación:
 <FieldRef Name='Title' />  
 <FieldRef Name='Body' />  
 <FieldRef Name='Created' />  
 <FieldRef Name='Author' />  
 <FieldRef Name='Attachments' />  
  • Finalmente en la columna central, es momento de configurar la conexión al Sitio de SharePoint 2010. Hacer clic en el botón cargar Listas, y seleccionar la lista, que para este ejemplo es una lista de Anuncios, que debe tener los mismos campos como su lista fuente, es decir: Título, Autor, Fecha, y Adjuntos. Como son los campos por defecto de cualquier lista no hay mucho por configurar. Si hubiera otros campos personalizados seleccionados en la fuente, estos deberán ser creados antes en la lista de Destino.
  • Al final se hace clic en el botón Exportar Datos y el resultado deberá ser la información migrada del sitio fuente al de destino, y un mensaje indicando que la operación fue exitosa mostrando el número de registros procesados.
Exportar2

Si usted se encuentra interesado en probar nuestra herramienta comuníquese con nosotros haciendo clic aquí y con gusto le enviaremos un vínculo de descarga.

No hay comentarios:

Publicar un comentario