Cómo descargar archivos de una biblioteca de documentos desde SharePoint

Para copiar desde una biblioteca de Sharepoint se pueden utilizar los Web Services de Sharepoint

En el siguiente código se demuestra el uso de los mismos con un uso práctico obtener archovos de una biblioteca de documentos, en este caso, y copiarlos físicamente a disco.

Para automatizar dicha tarea se podría generar un ejecutable del tipo consola en .Net que fuera ejecutado por una tarea de Windows.

Primero se deben generar las Referencias Web a los web services de Sharepoint 1 para Lists.asmx y otro para SiteData.asmx

El primero es para trabajar con la lista en sí y el segundo es para obtener el WEBID.

Acá el código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.Net;
using System.IO;

namespace CopiarArchivos
{
class Program
{
static void Main(string[] args)
{
Lists.Lists list = new Lists.Lists(); //Creo objeto del Web Service
list.Url = “http://server:puerto/_vti_bin/lists.asmx“; //Cambio url
list.Credentials = System.Net.CredentialCache.DefaultCredentials;//Paso credenciales al WS

System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

doc.LoadXml(“<Document><Query /><ViewFields /><QueryOptions /></Document>”);

System.Xml.XmlNode listQuery = doc.SelectSingleNode(“//Query”);

System.Xml.XmlNode listViewFields = doc.SelectSingleNode(“//ViewFields”);

System.Xml.XmlNode listQueryOptions = doc.SelectSingleNode(“//QueryOptions”);

Guid g = GetWebID(“http://server:puerto“);
//fin nuevo
System.Xml.XmlNode items = list.GetListItems(“Documentos”, string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, g.ToString());

foreach (XmlNode node in items)
{
if (node.Name == “rs:data”)
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
if (node.ChildNodes[i].Name == “z:row” && node.ChildNodes[i].Attributes[“ows_ContentType”].Value.ToString() == “Document”)
{
//Muestro por consola el nombre del archivo
Console.WriteLine(node.ChildNodes[i].Attributes[“ows_LinkFilenameNoMenu”].Value.ToString());
//Obtengo la URl del sitio.
string strURL = node.ChildNodes[i].Attributes[“ows_EncodedAbsUrl”].Value;
//Obtengo el nombre del archivo
string strFileName = node.ChildNodes[i].Attributes[“ows_LinkFilenameNoMenu”].Value.ToString();
//Llamo a método para bajar el archivo de SP a disco
DownLoadAttachment(strURL, strFileName);

}
}
}
}
Console.WriteLine(“Presione cualquier tecla para finalizar…”);
Console.ReadLine();

}

static Guid GetWebID(string webPath)
{

SiteData.SiteData siteDataWS = new SiteData.SiteData();

siteDataWS.UseDefaultCredentials = true;

SiteData._sWebMetadata webMetaData;

SiteData._sWebWithTime[] arrWebWithTime;

SiteData._sListWithTime[] arrListWithTime;

SiteData._sFPUrl[] arrUrls;

string roles; string[] roleUsers; string[] roleGroups;

siteDataWS.Url = webPath + “/_vti_bin/sitedata.asmx”;

uint i = siteDataWS.GetWeb(out webMetaData, out arrWebWithTime, out arrListWithTime, out arrUrls, out roles, out roleUsers, out roleGroups);

Guid g = new Guid(webMetaData.WebID);

return g;

}

public static void DownLoadAttachment(string strURL, string strFileName)
{

HttpWebRequest request;

HttpWebResponse response = null;

try
{

request = (HttpWebRequest)WebRequest.Create(strURL);

request.Credentials = System.Net.CredentialCache.DefaultCredentials;

request.Timeout = 10000;

request.AllowWriteStreamBuffering = false;

response = (HttpWebResponse)request.GetResponse();

Stream s = response.GetResponseStream();

//Escribir a disco creando archivo

FileStream fs = new FileStream(@”C:\DownLoads\” + strFileName, FileMode.Create);

//

byte[] read = new byte[256];

int count = s.Read(read, 0, read.Length);

while (count > 0)
{

fs.Write(read, 0, count);

count = s.Read(read, 0, read.Length);

}

//Cerrar archivo y stream

fs.Close();

s.Close();

response.Close();

}

catch (Exception ex)
{

Console.WriteLine(ex.Message);
}

}

}
}

Para realizar el código me basé en los isguientes links

http://blogs.msdn.com/sowmyancs/archive/2007/09/15/how-to-download-files-from-a-sharepoint-document-library-remotely-via-lists-asmx-webservice-sps-2003-moss-2007.aspx

http://www.sharepoint-tips.com/2007/02/how-to-use-getlistitems-web-service.html

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s