2011-10-11 8 views
3

Я работаю над сценарием Powershell для переноса данных из существующей базы данных SQL Server в списки Sharepoint 2010. Некоторые из записей в существующей базе данных создали и изменили даты, которые клиент хотел бы переносить в Sharepoint.Настройка созданных и измененных дат для элементов списка Sharepoint 2010

Сценарий миграции использует метод UpdateListItems в веб-службе списков Sharepoint, чтобы загружать партии CAML для создания новых элементов. Я обновил свой CAML, чтобы установить столбец «Создано», однако значение кажется проигнорированным и просто установлено на текущую дату.

Возможно ли установить эти даты вручную либо через веб-службы, либо через метод ProcessBatchData на объекте SPWeb? Я видел примеры онлайн, которые подразумевают, что это можно сделать для отдельных элементов, отключив обновление системы и изменив параметры управления версиями. Однако работа с отдельными элементами не является вариантом, так как у нас есть около 800 000 элементов списка для импорта.

+0

Я не думаю, что это возможно с помощью веб-служб SharePoint. Единственный вариант, похоже, является объектной моделью сервера. – int32

+0

Использование API не является проблемой - я бы предпочел не переписывать, но это не огромная сделка. Добавление элементов списка отдельно не является вариантом, поскольку процесс занимает слишком много времени. Если бы был некоторый способ разрешить его временно на всем сайте, я мог бы, вероятно, использовать SPWeb.ProcessBatchData и предоставить ему свой XML. – Jason

+0

О, это то, что вы имели в виду «индивидуально», теперь я понял ;-) Каждый метод, который вы могли бы использовать для добавления этого множества элементов, будет медленным, но я не понимаю, почему вы не можете добавить их по отдельности, получение тайм-аута? Вы также можете рассмотреть возможность разделения ваших данных в разных списках, потому что даже если 800 000 элементов даже не закрывают лимит списков, это будет настолько удивительно медленным, что вы, возможно, захотите вытащить ваши волосы ;-) – int32

ответ

1

Решение было связано с использованием веб-сервисов с использованием SPWeb.ProcessBatchData для импорта моих данных (спасибо Андреасу).

XML-передаваемый в этот метод выглядит следующим образом:

<ows:Batch OnError="Continue"> 
    <Method ID="1"> 
    <SetList /> 
    <SetVar Name="ID">New</SetVar> 
    <SetVar Name="Cmd">Save</SetVar> 
    <SetVar Name="urn:schemas-microsoft-com:office:office#ColumnName1">Value</SetVar> 
    <SetVar Name="urn:schemas-microsoft-com:office:office#Modified">2009-09-03T15:05:00Z</SetVar> 
    <SetVar Name="urn:schemas-microsoft-com:office:office#Created">2004-01-15T13:48:00Z</SetVar> 
    </Method> 
    <Method ID="2"> 
    ... 
    </Method> 
    ... 
</ows:Batch> 

Элемент «Setlist» должен содержать Guid для списка, чтобы добавить данные тоже. В моем примере XML выше этого пуста, потому что XML предварительно сгенерирован перед импортом данных в SharePoint, и мы не можем гарантировать, что список Sharepoint Guid на целевом сервере будет таким же, поэтому мы заполняем его непосредственно перед импортом.

Я также должен был гарантировать, что даты передаются в том месте, где они находятся в правильном формате, передавая их в метод SPUtility.CreateISO8601DateTimeFromSystemDateTime.

Смежные вопросы