среда, 8 февраля 2012 г.

Генерация большого числа записей в список SharePoint

Генерация записей в список - это довольно частая задача, пригодится не только тестировщикам, но и программистам - всегда интересно проверить на практике ограничения списков, и насколько будет тормозить выборка/вставка/обработка данных при стольких-то записях в списке.

Поэтому неплохо это уметь, а не уповать "на авось", тем более что делается это очень просто с помощью довольно короткого PowerShell-скрипта. У меня давно уже валяется такой скрипт, который использую лично я, вот решил поделиться :)



Не смею больше тянуть:

# Генерим XML для создания 150 записей в списке с GUID = $listID
# Колонку с InternalName=$column заполняем случайными числами от 1 до 10 млн.
function Generate150Items($listID, $column)
{
  $method = "<Method ID=""{0}""><SetList>" + $listID + "</SetList><SetVar Name=""Cmd"">Save</SetVar><SetVar Name=""ID"">New</SetVar><SetVar Name=""urn:schemas-microsoft-com:office:office#" + $column + """>{1}</SetVar></Method>`n"
  Write-Host Method template: $method
  $methods = ""
  $r = New-Object System.Random
  for($i = 1;$i -le 150; $i++)
  {
    $methods = $methods + [System.String]::Format($method, $i, $r.Next(1,10000000))
  }
  return [System.String]::Format("<?xml version=""1.0"" encoding=""UTF-8""?><ows:Batch OnError=""Return"">{0}</ows:Batch>", $methods);
  
}

# Пример использования
$web = Get-SPWeb http://localhost
$list = $web.Lists["Your list title"]
$xml = Generate150Items $list.ID "Title"
$results = $web.ProcessBatchData($xml)

Результат:

В списке:

P.S.: Да, желательно тестовые данные создавать в тестовых списках, потому что удалить, к примеру, 15000 записей без удаления самого списка - на самом деле далеко не так просто, как это может показаться :)

Но если вам все-таки нужно будет удалить много записей, и не удалять при этом список - как это сделать правильно, описано на SharePoint StackExchange (к слову, это ответ многим известного Игоря Афанасова).

2 комментария:

  1. Извините, но из скрипта я не понял:

    $results = $w.ProcessBatchData($xml)

    Что такое $w и где оно объявлено?

    ОтветитьУдалить
    Ответы
    1. Вячеслав, замените $w на $web плз :) Я пишу более короткие имена переменных для быстроты, но для поста решил сделать их более читаемыми. Соответственно, не везде заменил :( Сейчас исправлю.

      Удалить

Внимание! Реклама и прочий спам будут беспощадно удаляться.