Rodrigo Romano – MVP SharePoint Server

Registros de um Especialista SharePoint :)

Posts Tagged ‘Desenvolvimento; Object Model; Batch;

Batch Delete em Listas e Bibliotecas do SharePoint

with 3 comments


Olá SharePointers!!

Hoje, logo após feriado – dia das crianças – resolvi fazer um post referente a uma TIP para deletar todos itens de uma lista/biblioteca.

Procurando por métodos no Object Model do SharePoint faríamos ERRONEAMENTE dessa forma:

private void LimparBiblioteca(string urlDestino, string listName)
{
    using (SPSite site = new SPSite(urlDestino))
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists.TryGetList(listName);
        if (list != null)
        {
            foreach (SPListItem item in list.Items)
            {
                list.Items.DeleteItemById(item.ID);

                #region Outra forma para deletar
                //SPListItem itemParaDeletar = list.GetItemById(item.ID);
                //itemParaDeletar.Delete();
                #endregion
            }
        }
    }
}

Embora essa forma não esteja errada (conforme sugestão do Fabian Gehrke – 03/01/2014), não é NADA performática. Para conseguir mais performance na ação, devemos utilizar a forma abaixo:

    • Itens de Lista
private void LimparLista(string urlDestino, string listName)
{
    using (SPSite site = new SPSite(urlDestino))
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists.TryGetList(listName);
        if (list != null)
        {
            StringBuilder strDelete = new StringBuilder();
            strDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            strDelete.Append("<Batch>");
            foreach (SPListItem item in list.Items)
            {
               strDelete.Append("<Method>");
               strDelete.Append("<SetList Scope=\"Request\">" + list.ID 
                                           + "</SetList>");
               strDelete.Append("<SetVar Name=\"ID\">" + item.ID + "</SetVar>");
               strDelete.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
               strDelete.Append("</Method>");
            }
            strDelete.Append("</Batch>");

            web.ProcessBatchData(strDelete.ToString());
        }
    }
}
  • Documentos em uma Biblioteca
private void LimparBiblioteca(string urlDestino, string listName)
{
    using (SPSite site = new SPSite(urlDestino))
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists.TryGetList(listName);
        if (list != null)
        {
            StringBuilder strDelete = new StringBuilder();
            strDelete.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
            strDelete.Append("<Batch>");
            foreach (SPListItem item in list.Items)
            {
                strDelete.Append("<Method>");
                strDelete.Append(string.Concat("<SetList Scope=\"Request\">", 
                                                    list.ID, "</SetList>"));
                strDelete.Append(string.Concat("<SetVar Name=\"ID\">", 
                                                    item.ID, "</SetVar>"));
                strDelete.Append(string.Concat("<SetVar Name=\"owsfileref\">",
 item.File.ServerRelativeUrl, "</SetVar>")); 
                strDelete.Append("<SetVar Name=\"Cmd\">Delete</SetVar>");
                strDelete.Append("</Method>");
            }
            strDelete.Append("</Batch>");

            web.ProcessBatchData(strDelete.ToString());
        }
    }
}
    A única diferença entre os métodos LimparLista e LimparBiblioteca está na linha em negrito.
    #FicaADica
Advertisements

Written by Rodrigo Romano

October 13, 2011 at 9:58 am