SharePoint 2010: Carga de archivos con el modelo de objetos en cliente!

Como sabéis, el modelo de objetos en cliente de SharePoint 2010 facilita el poder interoperar de forma remota con sitios de SharePoint en base a tres implementaciones: .NET, Silverlight y ECMAScript. El ámbito de operación de cualquiera de las tres implementaciones está dado por un nivel superior determinado por la colección de sitios y un nivel inferior que podemos considera que es un elemento / documento de biblioteca o lista. Entre medias, podemos crear muchos de los elementos específicos de la jerarquía de SharePoint como por ejemplo crear sitios, listas, elementos en listas, etc. Como ejemplo de la potencia del modelo de objetos en cliente, resulta bastante sencillo cargar un archivo en una biblioteca de documentos desde por ejemplo una aplicación de escritorio en la que usemos la implementación .NET:

   1: using System;

   2: using System.Collections.Generic;

   3: using System.Linq;

   4: using System.Text;

   5:  

   6: //Espacios de nombres necesarios

   7: using MO_NET=Microsoft.SharePoint.Client;

   8: using System.IO;

   9:  

  10: namespace NetClientOMDemo

  11: {

  12:     class Program

  13:     {

  14:         static void Main(string[] args)

  15:         {

  16:             try

  17:             {

  18:                 using (MO_NET.ClientContext ctx = 

  19:                     new MO_NET.ClientContext("http://demo2010a:100/sites/PortalIntranet/"))

  20:                 {

  21:                     MO_NET.List lBibliotecaDocumentos = 

  22:                         ctx.Web.Lists.GetByTitle("Documentos compartidos");

  23:                     MO_NET.FileCreationInformation fciArchivo =

  24:                         new MO_NET.FileCreationInformation();

  25:                     fciArchivo.Content = File.ReadAllBytes(@"..\..8 - Workflow.pptx");

  26:                     fciArchivo.Url = "08 - Workflow.pptx";

  27:                     fciArchivo.Overwrite = true;

  28:                     MO_NET.File fToUpload = 

  29:                         lBibliotecaDocumentos.RootFolder.Files.Add(fciArchivo);

  30:                     ctx.Load(fToUpload);

  31:                     ctx.ExecuteQuery();

  32:                 }

  33:             }

  34:             catch (Exception ex)

  35:             {

  36:                 Console.WriteLine("Error: {0}", ex.Message);

  37:             }

  38:             Console.ReadLine();

  39:         }

  40:     }

  41: }

Como vemos, los pasos a seguir son:

  • Definir un objeto de tipo ClientContext que se encargará de “orquestar” todas las peticiones que haya entre cliente y servidor.
  • Accedemos a la biblioteca con la que queremos trabajar mediante el método GetByTitle.
  • Definimos un objeto de tipo FileCreationInformation que nos va a permitir cargar un documento en la biblioteca en cuestión.
  • Configuramos dicho objeto especificando el archivo físico, el nombre en la biblioteca y si vamos a sobreescribir.
  • Llamamos al método Add() de la biblioteca de documentos para añadir el documento en cuestión.
  • Como siempre, definimos lo que queremos hacer mediante el método Load().
  • Realizamos de forma efectiva la ejecución de las operaciones mediante ExecuteQuery().

Y el resultado   obtenido tras ejecutar la carga del archivo con nuestra aplicación cliente es que este se carga de forma efectiva en la biblioteca de documentos.

image