На основе этого скрипта, я верю, что вам удастся сформировать решения для генерации более реалистичных данных для ваших тестов.
Для каждого из типов полей я написал собственную маленькую функцию для генерации значений этого поля.
Например, вот эта функция:
$random = New-Object System.Random
function RandomDay() { $start = New-Object System.DateTime(1995, 1, 1); $range = ([System.TimeSpan]([System.DateTime]::Today - $start)).Days; return [System.DateTime]$start.AddDays($random.Next($range)); }
, вернет случайную дату. Полученные с её помощью значения можно использовать для заполнения колонок “Start Date” и “Due Date”.
Функции по генерации приоритета, статуса и прогресса задачи также довольно простые:
function RandomPriority() { $priorities = "(1) High","(2) Normal","(2) Normal","(2) Normal","(3) Low" return [System.String]$priorities[$random.Next(0,5)] } function RandomStatus() { $status = "Completed","Deferred","In Progress","Not Started" return [System.String]$status[$random.Next(0,4)] } function RandomProgress() { $r = ($random.Next(0,20) * 5); if ($r -lt 10) { return [System.String]"0.0" + $r } else { return [System.String]"0." + $r } }
Более интересна функция по генерации заголовка задачи. Она определяет список действий и список контрагентов (названия контрагентов взяты из базы NorthWind), берет по одному значению из каждого списка, и склеивает их в единую строку. Вот так:
function RandomTitle() { $agents = "Alfreds Futterkiste","Ana Trujillo Emparedados y helados","Antonio Moreno Taqueria","Around the Horn","Berglunds snabbkop", "Blauer See Delikatessen","Blondesddsl pere et fils","Bolido Comidas preparadas","Bon app","Bottom-Dollar Markets", "B's Beverages","Cactus Comidas para llevar","Centro comercial Moctezuma","Chop-suey Chinese","Comercio Mineiro", "Consolidated Holdings","Drachenblut Delikatessen","Du monde entier","Eastern Connection","Ernst Handel", "Familia Arquibaldo","FISSA Fabrica Inter. Salchichas S.A.","Folies gourmandes","Folk och fa HB","Frankenversand", "France restauration","Franchi S.p.A.","Furia Bacalhau e Frutos do Mar","Galeria del gastronomo","Godos Cocina Tipica", "Gourmet Lanchonetes","Great Lakes Food Market","Hanari Carnes","GROSELLA-Restaurante","HILARION-Abastos" $actions = "Arrange a meeting with ","Demonstrate the product to ","Call ","Meet ","Discuss possibilities with ", "Sign contract with ", "Implement request from ", "Prepare materials for ", "Prepare documents for ", "Accord document with ", "Prepare advertisement for " return [System.String]$actions[$random.Next(0,12)] + $agents[$random.Next(0,35)] }
Наконец, нужно определить функцию, которая генерит XML для массового добавления записей через ProcessBatchData:
function Generate50Tasks($listID) { $method = "<Method ID=""{0}""><SetList>" + $listID + "</SetList>`n"; $method += "<SetVar Name=""Cmd"">Save</SetVar>`n<SetVar Name=""ID"">New</SetVar>`n"; $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#Title"">{1}</SetVar>`n" $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#StartDate"">{2}</SetVar>`n" $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#DueDate"">{3}</SetVar>`n" $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#Priority"">{4}</SetVar>`n" $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#Status"">{5}</SetVar>`n" $method += "<SetVar Name=""urn:schemas-microsoft-com:office:office#PercentComplete"">{6}</SetVar>`n" $method += "</Method>`n" $methods = "" for($i = 1;$i -le 50; $i++) { $title = RandomTitle $startDate = RandomDay $dueDate = RandomDay $priority = RandomPriority $status = RandomStatus $percentComplete = RandomProgress $methods = $methods + [System.String]::Format($method, $i, $title, $startDate.ToString("s"), $dueDate.ToString("s"), $priority, $status, $percentComplete.ToString().Replace(",",".")) } return [System.String]::Format("<?xml version=""1.0"" encoding=""UTF-8""?><ows:Batch OnError=""Return"">{0}</ows:Batch>", $methods); }
Генерация 50 записей обеспечивает относительную уникальность заголовков. Конечно, можно генерировать и по 150 записей, и нагенерить несколько тысяч задач, – но это требуется не так часто.
Давайте, наконец, сгенерируем записи:
$web = Get-SPWeb http://localhost $list = $web.Lists["Tasks"] $xml = Generate50Tasks $list.ID $web.ProcessBatchData($xml)
Здесь исправьте хост/порт и заголовок списка на тот, который соответствует вашему порталу.
Также, вы можете скачать скрипт в виде файла. Если у вас русский портал, у меня есть и русская версия скрипта.
После генерации, получите примерно такую картинку:
Если использовать русский скрипт, картинка будет немного другой:
Вот здесь выложил генерилку данных для SharePoint.
ОтветитьУдалитьhttp://spsdatagenerator.codeplex.com/
Привет Александр, спасибо за ссылку!
УдалитьПодход мне нравится, с помещением ссылки в List Settings. Попробую использовать.
Александр, ссылка на генерацию данных появляется только для настраиваемых списков. Если CustomAction деплоить на ContentType 0x, будет для всех списков ;)
УдалитьСпасибо за совет. Мне это известно. Просто пока геренация работает только для списков.
УдалитьКак будет время добавлю для библиотек. Да и вообще там ещё много чего можно сделать.
В частности понадобилось самому такая функция - уже есть куча данных, и нужно random занести в определённые колонки.
Ребят, а не поделитесь еще раз генерилкой данных? )
ОтветитьУдалитьОй давно это было.
УдалитьГде-то у меня проект валяется, но его доделывать нужно.