Desarrollo en .NET

Desarrollo en C# bajo la plataforma .NET y Mono

Borrado eficiente de documentos y elementos en SharePoint 2010

El modelo de objetos de SharePoint 2010, en concreto la clase SPWeb, nos brinda la posibilidad de ejecutar múltiples operaciones en el servidor de manera transaccional gracias al método ProcessBatchData.

Veamos un ejemplo de borrado completo del contenido de una biblioteca y una lista que nos sirva como toma de contacto con la sintaxis y modo de empleo.

Escenario

Partimos de una biblioteca de documentos y de una lista de contactos estándar de SharePoint con los siguientes datos:

Código

Creamos una aplicación de consola en el servidor de SharePoint estableciendo en las propiedades del proyecto que la plataforma de destino es x64.

Agregamos el espacio de nombres necesario:

using Microsoft.SharePoint;

A continuación el código inicial del ejemplo. La línea comentada realizaría el vaciado de la papelera posterior a la eliminación de todo el contenido de la lista y la biblioteca.

static void Main(string[] args)
{
    using (SPWeb web = new SPSite("http://intranet").OpenWeb())
    {
        web.ProcessBatchData(GenerarLoteBorradoElementos(web.Lists["Contactos"]).ToString());
        web.ProcessBatchData(GenerarLoteBorradoDocumentos((SPDocumentLibrary)web.Lists["Documentos"]).ToString());

        // web.RecycleBin.DeleteAll();
    }
}

Borrado de elementos de una lista

private static StringBuilder GenerarLoteBorradoElementos(SPList lista)
{
    StringBuilder SB = new StringBuilder();
    SB.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");

    string comando = "<Method><SetList>" + lista.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>";

    foreach (SPListItem item in lista.Items)
        SB.Append(string.Format(comando, item.ID.ToString()));

    SB.Append("</Batch>");

    return SB;
}

Borrado de documentos de una biblioteca

La diferencia respecto al código de borrado de la lista es que para cada item de la biblioteca hay que especificar la URL relativa del documento.

private static StringBuilder GenerarLoteBorradoDocumentos(SPDocumentLibrary biblioteca)
{
    StringBuilder SB = new StringBuilder();
    SB.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>");

    string comando = "<Method><SetList>" + biblioteca.ID + "</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar><SetVar Name=\"owsfileref\">{1}</SetVar></Method>";

    foreach (SPListItem item in biblioteca.Items)
        SB.Append(string.Format(comando, item.ID.ToString(), item.File.ServerRelativeUrl));

    SB.Append("</Batch>");

    return SB;
}

Para finalizar, el código en un proyecto de ejemplo de Visual Studio 2010 como fichero adjunto.

Attachment: DeleteAll.zip
Posted: 26/4/2012 18:59 por Darío Cerredelo | con no comments
Archivado en: ,
Comparte este post: