Subir un archivo a una document library usando el Client Object Model de SharePoint 2010

Definitivamente creo que a la hora de programar componentes o aplicaciones que se ejecuten afuera de los servidores de SharePoint 2010, el Client Object Model nos va a cambiar la vida.

Aca les dejo un ejemplo de como subir un archivo del disco a una document library.

1) Primero tenemos que agregar las referencias a nuestro proyecto:

Microsoft.SharePoint.Client.dll
Microsoft.SharePoint.Client.Runtime.dll

Las pueden encontrar en el directorio ISAPI del servidor de SharePoint 2010 (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI)

2) Agregamos los siguientes usings:

using SP = Microsoft.SharePoint.Client;
using System.IO;

La primera asignacion, es porque dentro del namespace de SharePoint.Client tenemos algunas ambiguedades (en el Client OM las clases no tienen el prefijo SP), y de esta forma las evitamos (sin ir mas lejos la clase "File" esta tanto en Microsoft.SharePoint.Client, como en System.IO).

3) Y el codigo que sube nuestro archivo a SharePoint:

using (SP.ClientContext context = new SP.ClientContext("http://serverSharePoint"))
{
//Obtengo la coleccion de folders de la raiz del sitio
SP.FolderCollection folders = context.Web.Folders;
context.Load(folders);
context.ExecuteQuery();

//Obtengo una instancia de la DL como objeto Folder
var fc = from folder in folders.ToList()
where (folder.Name == "Documents")
select folder;
SP.Folder documentsFolder = (SP.Folder)fc.FirstOrDefault();

//creo el arreglo de bytes con el contenido del archivo
var fStream = File.OpenRead("c:\\ejemplo.txt");
byte[] content = new byte[fStream.Length];
fStream.Read(content, 0, (int)fStream.Length);
fStream.Close();

// Lo cargo en un objeto FileCreationInformation
SP.FileCreationInformation fileInfo = new SP.FileCreationInformation();
fileInfo.Content = content;
fileInfo.Overwrite = true;
fileInfo.Url = "ejemplo.txt";
// Y lo subo
documentsFolder.Files.Add(fileInfo);
context.ExecuteQuery();
}

Pronto voy a ver si con tiempo subo algunos ejemplos mas...

0 comments:

Post a Comment