Эффективный способ создания большого количества папок SharePoint - PullRequest
3 голосов
/ 28 мая 2010

В настоящее время я создаю большое количество папок SharePoint в списке (например, ~ 800 папок), в каждой папке содержится разное количество элементов. В настоящее время это делается так, что программным способом считывает типы контента, элементы, прослушиватели событий и т.п. из одной и той же папки из другого Интернета, а затем создает ту же папку в текущем Интернете.

Это работало достаточно быстро и быстро в среде разработчиков. Однако, когда дело доходит до среды с WFE и фермами, это сильно замедляется. Я проверил, что в коде нет утечек, и что этот код соответствует рекомендациям по кодированию SharePoint.

В данный момент я смотрю на это на уровне кода. Исходя из вашего опыта, существуют ли эффективные способы создания большого количества папок, списков и элементов SharePoint?

РЕДАКТИРОВАТЬ: В настоящее время я использую SharePoint API, но в будущем буду переходить на использование веб-службы. Я заинтересован в рассмотрении обоих вариантов, хотя. Разумный код - это просто общее чтение папки и ее типов контента, а также элементов и их деталей, затем создайте одну и ту же папку в том же списке с теми же типами контента, а затем скопируйте элементы с помощью обновления патча. Я хочу знать, есть ли более эффективные способы сделать выше.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 28 мая 2010

Вы можете использовать Пакетное обновление для создания папок и элементов. Это намного быстрее, чем создание элемента за элементом.

Чтобы прочитать структуру исходных папок, вы можете повысить производительность с помощью запроса CAML .

2 голосов
/ 28 мая 2010

Вот как бы я это сделал через API-интерфейс SharePoint в PowerShell. Этот же метод может быть легко переведен на C #.

[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | Out-Null;
[array]$folders = "A","B","C","D","E","F","G";
$SPSite = New-Object Microsoft.SharePoint.SPSite("http://intranet");
$OpenWeb = $SpSite.OpenWeb("/departments/Branding");
$OpenList = $OpenWeb.Lists["Test"];

foreach ($folder in $folders)
{
    $exists = $OpenList.Folders | Select-Object -Property Name | Where {$_.Name -eq $folder.ToString()}
    if ($exists.Name -eq $folder) { $folder + " already exists!"; }
    else
    {
        $item = $OpenList.Folders.Add("",[Microsoft.SharePoint.SPFileSystemObjectType]::Folder,$folder);
        $item.Update();
        $folder + " Created!";
    }
}
$SPSite.Dispose();
0 голосов
/ 28 мая 2010

Попробуйте это: В вашей библиотеке документов перейдите в настройки -> Настройки сайта и нажмите «Сохранить библиотеку документов как шаблон» и выберите «Включить содержимое». Теперь это не сохранит ваши настройки безопасности, но должно привести вас к середине пути. Оттуда попробуйте программно установить разрешения.

Другая вещь, которую вы можете попробовать, это использовать http://www.sharepointproducts.com/products/default.aspx копирование. Он будет массово перемещать / копировать что угодно и сохранять права пользователя. Я бы запустил его из служебной учетной записи, чтобы вы могли программно вызывать его с сервера. Это позволяет только одному человеку сделать это в бесплатной версии. Небольшая цена за бесплатную программу:).
----- EDIT -----

Я нашел кое-что еще в CodePlex, которое может помочь вам: http://sprsync.codeplex.com/. Проверьте исходный код, так как он может помочь вам начать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...