Eliminación masiva de elementos de una lista en SharePoint Online

Es sabido que el uso de listas largas puede provocar algunos problemas debido al límite de 5000 elementos de una vista, y el hecho de que este límite exista es totalmente comprensible: El objetivo es minimizar el bloqueo de la base de datos en el servidor de SQL, la base de datos propia de SharePoint. Éste utiliza un bloqueo a nivel registro como estrategia para asegurar actualizaciones en él sin impactar negativamente a otros usuarios que estén accediéndolo.

Existen otras maneras de manejar listas largas, las cuales pueden verse en este artículo:

Administrar listas y bibliotecas grandes en SharePoint

En el caso de enfrentarse con una situación en donde una lista o biblioteca hayan excedido este límite y no se tenga la necesidad de mantener toda la información en ella (tal es el caso de listas de tareas, workflows, históricos, etc), y la visualizacion por el navegador no sea posible y no tengamos forma de poder crear vistas, podemos usar una alternativa CSOM para eliminar los items y poder crear o editar las vistas y así evitar nuevamente este problema. Es importante hacer notar que esto aplica principalmente para listas o bibliotecas de históricos donde la información pueda ser borrada sin riesgo para la empresa.

A continuación se muestra el código de PowerShell CSOM y así poder eliminar de forma masiva los elementos de las bibliotecas o listas.

  
#Adapta la ruta para apuntar a las librerías de SharePoint (dll) que pueden descargarse desde SP Framerwork
Import-Module 'C:\temp\SharePoint Online Client Browser v2.2\Microsoft.SharePoint.Client.dll'
Import-Module 'C:\temp\SharePoint Online Client Browser v2.2\Microsoft.SharePoint.Client.Runtime.dll'
Add-Type -Path 'C:\temp\SharePoint Online Client Browser v2.2\Microsoft.SharePoint.Client.dll'


$site = ''
$admin = ''

$password = Read-Host 'Enter Password' -AsSecureString

$context = New-Object Microsoft.SharePoint.Client.ClientContext($site)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($admin , $password)
$context.Credentials = $credentials


$list = $context.Web.Lists.GetByTitle('')
$context.Load($list)
$context.ExecuteQuery()
$count = $list.ItemCount

$newline = [environment]::newline
Write-Host -NoNewline "Eliminando elementos de la lista " -foregroundcolor black -backgroundcolor yellow
$continue = $true
while($continue)
{
    Write-Host -NoNewline "." -foregroundcolor black -backgroundcolor yellow
    $query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(100, "ID")
    $listItems = $list.GetItems( $query )
    $context.Load($listItems)
    $context.ExecuteQuery()       
    if ($listItems.Count -gt 0)
    {
        for ($i = $listItems.Count-1; $i -ge 0; $i--)
        {
            $listItems[$i].DeleteObject()
        } 
        $clientContext.ExecuteQuery()
    }
    else
    {
        Write-Host "." -foregroundcolor black -backgroundcolor yellow
        $continue = $false;
    }
}
Write-Host "Se han eliminado todos los listitems." -foregroundcolor black -backgroundcolor green