Как стать автором
Поиск
Написать публикацию
Обновить

Выполнение пакетных команд в SharePoint

Время на прочтение5 мин
Количество просмотров858
Объектная модель SharePoint предоставляет множество функциональных возможностей, что позволяет выполнить одну и ту же операцию разными способами. У каждого из способов есть свои преимущества: один проще использовать, другой имеет более высокую производительность. Одной из таких операций является операция пакетной вставки (редактирования, удаления) данных в списках и библиотеках документов SharePoint.

Самым элементарным способом добавления данных в списки является использование методов класса SPListItemCollection. Данный способ удобен, в случае если необходимо добавить одну или несколько записей. Если необходимо обработать большой массив данных с оптимальной производительностью рекомендуется использовать метод ProcessBatchData класса SPWeb.

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

Приведенный ниже пример использует метод ProcessBatchData класса SPWeb для добавления в список 100 записей:

string listId = "C3715A5A-879B-4573-AED4-35E9DCD4E5F7";
string batchCommandFormat = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ows:Batch OnError=\"Continue\">{0}</ows:Batch>";
string batchMethodFormat = "<Method ID=\"SaveItem_{0}\">" +
                            "<SetList Scope=\"Request\">{1}</SetList>" +
                            "<SetVar Name=\"Cmd\">Save</SetVar>" +
                            "<SetVar Name=\"ID\">New</SetVar>" +
                            "<SetVar Name=\"urn:schemas-microsoft-com:office:office#Title\">{2}</SetVar>" +
                            "</Method>";

StringBuilder methodsBuilder = new StringBuilder();
for (int i = 0; i < 20; i++)
{
    methodsBuilder.AppendFormat(batchMethodFormat, i, listId, "Item title " + i);
}

string batchResult = web.ProcessBatchData(String.Format(batchCommandFormat, methodsBuilder));

* This source code was highlighted with Source Code Highlighter.

Основным элементом CAML запроса является элемент <Method>. Содержимое данного элемента описывает саму логику операции. В частности с помощью элемента <SetList> указывается, для какого списка будет выполняться операция.

Элемент <SetVar> используется для задания параметров команды. Так, с помощью него устанавливается тип выполняемой команды и значения полей. При этом при установке значений полей, название полей необходимо начинать с префикса urn:schemas-microsoft-com:office:office# (за некоторым исключением). В случае вставки данных для поля ID необходимо указать значение New, что указывает SharePoint сгенерировать ID элемента автоматически.

Насколько быстрее?

Согласно измерениям Андреаса Грабнера и Эрика Бартелса использование метода ProcessBatchData дает почти двукратное преимущество в скорости выполнения. Причем такое превосходство заметно как на большом количестве записей (более 200 000 записей), так и на относительно небольших объемах данных – 100 записей.

Однако при использовании ProcessBatchData стоит не забывать использовать StringBuilder для генерации CAML команд.

Примеры использования

Ниже приведены примеры пакетных CAML запросов для работы с записями в списках и библиотеках документов SharePoint:
  • Добавление записи в список
    <Method ID="CreateItem">
      <SetList Scope="Request">C3715A5A-879B-4573-AED4-35E9DCD4E5F7</SetList>
      <SetVar Name="Cmd">Save</SetVar>
      <SetVar Name="ID">New</SetVar>
      <SetVar Name="urn:schemas-microsoft-com:office:office#Title">New item title</SetVar>
    </Method>
  • Создание новой папки
    <Method ID="CreateFolder">
      <SetList Scope="Request">C3715A5A-879B-4573-AED4-35E9DCD4E5F7</SetList>
      <SetVar Name="Cmd">Save</SetVar>
      <SetVar Name="ID">New</SetVar>
      <SetVar Name="Type">1</SetVar>
      <SetVar Name="urn:schemas-microsoft-com:office:office#Title">New folder title</SetVar>
      <SetVar Name="owsfileref">/lists/test/folder 1</SetVar>
    </Method>
  • Удаление записи (записи или папки)
    <Method ID="DeleteItem">
      <SetList Scope="Request">C3715A5A-879B-4573-AED4-35E9DCD4E5F7</SetList>
      <SetVar Name="Cmd">Delete</SetVar>
      <SetVar Name="ID">50016</SetVar>
    </Method>

    Для удаления файла в библиотеке документов необходимо дополнительно указать относительный путь к файлу в параметре owsfileref:
    <SetVar Name="owsfileref">doclib/file.xls</SetVar>
  • Изменение полей записи
    <Method ID="UpdateItem">
      <SetList Scope="Request">C3715A5A-879B-4573-AED4-35E9DCD4E5F7</SetList>
      <SetVar Name="Cmd">Save</SetVar>
      <SetVar Name="ID">50023</SetVar>
      <SetVar Name="urn:schemas-microsoft-com:office:office#Title">Updated title</SetVar>
    </Method>
  • Переименование файла или папки
    <Method ID="RenameItem">
      <SetList Scope="Request">0e8bdba7-4486-4fa0-9a44-f80cd31f538a</SetList>
      <SetVar Name="Cmd">Save</SetVar>
      <SetVar Name="ID">6</SetVar>
      <SetVar Name="owsfileref">/doclib/file.xls</SetVar>
      <SetVar Name="owsnewfileref">file_new</SetVar>
    </Method>

    В параметре owsnewfileref расширение и путь к файлу указывать при этом не надо. Такой же CAML используется для переименования папок – в этом случае в параметре owsfileref указывается относительный путь к папке, которую необходимо переименовать, а в параметре owsnewfileref новое название папки.
Ссылки по теме

Структура CAML
RPC методы WSS
Теги:
Хабы:
Всего голосов 9: ↑5 и ↓4+1
Комментарии1

Публикации

Ближайшие события