Удалить все элементы из списка SharePoint Online - PullRequest
1 голос
/ 06 января 2020

У меня есть сайт SPO со списком, который содержит около 12000 элементов.

Мне нужно ежедневно обновлять sh этих элементов из файла Excel.

У меня настроен поток для удалите все элементы, но я столкнулся с некоторыми проблемами:

  • Удаление 5000 элементов заняло у меня целый час при тестировании (я добавил шаг GetItems с числом строк 5000).
  • Некоторая ошибка вызвала поток к Fail, даже если все 5000 элементов были удалены.

Каков наилучший способ быстрого удаления всех элементов?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Я предлагаю вам использовать PowerShell для этого.

Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" 
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

$SiteUrl = "https://tenant.sharepoint.com/sites/team"
$UserName="admin@tenant.onmicrosoft.com"
$Password ="xxx"
$ListTitle="CustomList";

#Setup Credentials to connect
$context = new-object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,(ConvertTo-SecureString $Password -AsPlainText -Force))

$list = $context.Web.Lists.GetByTitle($ListTitle)
$context.Load($list)
$context.ExecuteQuery()

$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()
        }
        $context.ExecuteQuery()
    }
    else
    {
        $continue = $false;
    }
}
Write-Host "All listitems deleted from list." -foregroundcolor black -backgroundcolor green 

Если вы хотите запускать код каждый день, мы можем создать планировщик задач Windows и запускать PowerShell каждый день. См. Как автоматизировать сценарии PowerShell с помощью планировщика задач

0 голосов
/ 10 марта 2020

В моем конкретном сценарии у меня был столбец с названием OrganizationName, значения которого начинались почти с каждого алфавита.

Я сделал следующее:

  • Я объявил массив имея все алфавиты.
  • Применялось ли каждое к массиву.
  • Внутри l oop я запросил список элементов, в которых OrganizationName начинается с определенного алфавита
  • Добавил найденные элементы в массив
  • для каждого элемента в массиве, удалил его из списка

С помощью массива алфавита я смог обойти пороговое значение из 5000 предметов. Каждый алфавит может содержать до 1500 имен.

...