Batch Delete em Listas e Bibliotecas do SharePoint

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

3 ideias sobre “Batch Delete em Listas e Bibliotecas do SharePoint

  1. Pingback: Processamento Batch no SharePoint–Inserindo Itens em Lote no SharePoint | Fabian André Gehrke

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *