Используя Caml, я пытаюсь вернуть все элементы с сайта SharePoint Online, которые были изменены за последний год. Запрос приводит к ошибке, которая гласит: «Попытка выполнить операцию запрещена, поскольку она превышает пороговое значение представления списка, установленное администратором». Этот порог составляет 5000 элементов в SharePoint Online, и, насколько я могу судить после обсуждения с администратором SharePoint, его нельзя изменить.
Эта ошибка довольно хорошо документирована, но ни одно из рассмотренных мной решений не решило мой вопрос.
Я уже справлялся с этой проблемой, используя тег <RowLimit></RowLimit>
в моем запросе Caml и установив переменную $position
, которая отслеживает, где я нахожусь после каждого фрагмента из 5000 элементов. См. Ниже запрос, который работает для списков, содержащих более 5000 элементов:
$query = @"
<View Scope="RecursiveAll">
<Query>
<OrderBy><FieldRef Name="Created" Ascending="false"/></OrderBy>
</Query>
<RowLimit Paged="TRUE">5000</RowLimit>
</View>
"@
Вышеупомянутое работает. Однако он просто получает все из определенной библиотеки. Сейчас я пытаюсь получить все, что было изменено за последний год. Вот что у меня есть:
$oneYearAgo = (Get-Date).AddDays(-365)
$oneYearAgoString = $oneYearAgo.ToString("yyyy-MM-ddTHH:mm:ssZ")
$query = @"
<View Scope='RecursiveAll'>
<Query>
<OrderBy><FieldRef Name='Modified' Ascending='false'/></OrderBy>
<Where>
<Geq>
<FieldRef Name="Modified"/>
<Value Type="DateTime">
$oneYearAgoString
</Value>
</Geq>
</Where>
</Query>
<RowLimit Paged="TRUE">5000</RowLimit>
</View>
"@
Этот возвращает ошибку «Предпринятая операция запрещена, потому что она превышает пороговое значение представления списка, установленное администратором», хотя логика за пределами двух запросов Caml почти идентична.
Что-то не так с моим запросом Caml?