SharePoint Alfresco PHP MySQL
О сайте Контакты
воскресенье, 21 февраля 2016 г.

30 элементов при работе с представлением через PowerShell

Когда вы работаете со списками SharePoint в PowerShell через представления, вы приобретаете ряд преимуществ. Например, вы потом сможете изменить параметры фильтрации для представления прямо через веб-интерфейс, не прибегая к изменению скрипта. Тут есть одна интересная особенность: можно напороться на ограничение в 30 элементов при работе с представлением.

На тестовом сервере, когда вы отлаживаете скрипт, у вас может быть не очень много записей в списке, менее 30, и вы можете не заметить подвоха. Но на боевом SharePoint количество записей постоянно растет и ваш скрипт, если он написан не очень правильно, упрется в потолок 30 элементов.

Рассмотрим код для примера. Вот так можно получать элементы списка через представление:

$web       = Get-SPWeb $siteUrl
$list      = $web.Lists[$listName]
$view      = $list.Views[$allItems]
$viewItems = $list.GetItems($view)

$cnt = 0

# Пробегаемся по элементам
foreach($viewItem in $viewItems)
{
  $cnt++
  $itemID = $viewItem["ID"]
  Write-Host $cnt $itemID
}

Код простой, демонстрационный. И демонстрирует он то, что будут взяты только те элементы, которые выводятся для представления в веб-интерфейсе на первом экране. Чаще всего пейджинг настроен на 30 элементов на странице, вот и будет выведено только первые 30 элементов.

Но работать-то надо со всеми элементами представления, а не с первыми тридцатью. Как быть? Использовать следующую конструкцию:

$web           = Get-SPWeb $siteUrl
$list          = $web.Lists[$listName]
$spQuery       = New-Object Microsoft.SharePoint.SPQuery
$spQuery.Query = $list.Views[$allItems].Query
$viewItems     = $list.GetItems($spQuery)

$cnt = 0

# Пробегаемся по элементам
foreach($viewItem in $viewItems)
{
  $cnt++
  $itemID = $viewItem["ID"]
  Write-Host $cnt $itemID
}

Видите разницу? Точно также обращаемся к представлению, только через SPQuery. Во втором примере будут выведены все элементы представления, в первом примере - только 30 (сколько настроено для представления).

Мораль такова: надо быть внимательным, ведь SharePoint — очень коварная штука. Казалось бы, думаешь что будет работать одним образом, а работает совершенно другим. Поэтому на тестовом сервере лучше всегда проверять скрипты с большим количеством данных.

Sergey Lysenko, воскресенье, 21 февраля 2016 г.

Комментарии: