Введение в работу со списками с использованием SPServices
Microsoft стремительно движется в сторону предоставления SharePoint по модели SaaS в облаке.
Разработка решений для SharePoint Online имеет ряд особенностей, которые можно охаректеризовать тем, что нельзя использовать серверную объектную модель. Решения для SharePoint Online - это Sandboxed Solutions, CSOM, JSOM, APPs.
Не смотря на то, что CSOM/JSOM охватывают еще не все возможности SSOM, все большую роль начинает играть JavaScript и работа через клиентскую объектную модель.
В данной статье я хочу поговорить о библиотеке SPServices, позволяющую работать с веб-сервисами SharePoint, в удобном абстрактном виде. И как по мне, так в более простом с точки разработки виде, по сравнению с написанием аналогичного кода на JSOM.
SPServices является открытой библиотекой для jQuery.
Проект находится на codeplex'е: http://spservices.codeplex.com
Автор проекта - замечательный разработчик из Массачусетса - Marc Anderson.
Для работы необходимы jQuery и сама SPServices.
Скачиваем нужные версии и объявляем:
<script src="/_layouts/arvo/jquery/jquery-1.8.2.min.js"></script> <script src="/_layouts/arvo/SPServices/jquery.SPServices-0.7.2.min.js"></script>
Так же можно воспользоваться ссылками CDN.
С версионностью jQuery и SPServices могут быть особенности совместимости.
Лучше всего смотреть в онлайн документацию https://spservices.codeplex.com/documentation.
В документации по SPServices можно найти много чего интересного и на многие случаи "шарепойнтбытия". ;)
Ниже я опишу самые часто используемые, по крайней мере мной, сценарии.
1. Получение данных списков / библиотек докуменов:
$().SPServices({ // Действие получения элементов списка / библиотеки - GetListItems operation: "GetListItems", // Режим true - асинхронный, false - синхронный async: false, // По умолчанию, в случае отсутствия свойства async, его значение будет равным true // Отображаемое наименование списка / библиотеки listName: "<Имя списка/библиотеки>", // CAML перечисление получаемых полей CAMLViewFields: "<ViewFields><FieldRef Name='ID' /><FieldRef Name='Title' /></ViewFields>", // CAML условие фильтрации элементов CAMLQuery: "<Query><Where><Eq><FieldRef Name='Status'/>"+ "<Value Type='Text'>Не действующий</Value>"+ "</Eq></Where>"+ "<OrderBy><FieldRef Name='Title' /></OrderBy></Query>", // Опции CAML запроса CAMLQueryOptions: "<QueryOptions><ViewAttributes Scope='RecursiveAll' "+ "IncludeRootFolder='True' /></QueryOptions>", // Функция, выполняемая по результату, возвращаемого веб-сервисом completefunc: function(xData, Status) { // Цикл по элементам XML ответа от веб-сервиса $(xData.responseXML).SPFilterNode("z:row").each(function() { // Пример получения атрибутов элемента. // Перед внутренним именем в большинстве случаев должен фигурировать префикс "ows_" // ows - неймспейс SharePoint, расшифровывающийся как Office Web Server var owsID = $(this).attr("ows_ID"); var owsTitle = $(this).attr("ows_Title"); }); } });
2. Создание элемента списка / библиотеки:
$().SPServices({ // За создание отвечает действие обновления // Действие обновления элементов списка / библиотеки - UpdateListItems operation: "UpdateListItems", // Режим true - асинхронный, false - синхронный async: false, // По умолчанию, в случае отсутствия свойства async, его значение будет равным true // Тип команды для создания нового элемента - New batchCmd: "New", // Отображаемое наименование списка / библиотеки listName: "<Имя списка/библиотеки>", // Перечисление пар "Наименование поля" - "Значение элемента" valuepairs: [["Title", "<Наименование элемента>"], ["Description", "<Описание элемента>"]], // Функция, выполняемая по результату работы веб-сервиса completefunc: function(xData, Status) {} });
3. Обновление элемента списка / библиотеки:
$().SPServices({ // За создание отвечает действие обновления // Действие обновления элементов списка / библиотеки - UpdateListItems operation: "UpdateListItems", // Режим true - асинхронный, false - синхронный async: false, // По умолчанию, в случае отсутствия свойства async, его значение будет равным true // Отображаемое наименование списка / библиотеки listName: "<Имя списка/библиотеки>", // Идентификатор обновляемого элемента // Для обновления элемента параметр batchCmd задавать не требуется ID: "<Идентификатор элемента, например: 42>", // Перечисление пар "Наименование поля" - "Значение элемента" valuepairs: [["Title", "<Наименование элемента>"], ["Description", "<Описание элемента>"]], // Функция, выполняемая по результату работы веб-сервиса completefunc: function(xData, Status) {} });
Множественное обновление - используем метод SPUpdateMultipleListItems. Пример:
$().SPServices.SPUpdateMultipleListItems({ listName: "<Имя списка/библиотеки>", CAMLQuery: "<Query><Where><Eq><FieldRef Name='Status'/>"+ "<Value Type='Text'>Не действующий</Value>"+ "</Eq></Where>", valuepairs: [["Status", "Действующий"]] });
4. Удаление элемента списка / библиотеки:
$().SPServices({ // Действие обновления элементов списка / библиотеки - UpdateListItems operation: "UpdateListItems", // Режим true - асинхронный, false - синхронный async: false, // По умолчанию, в случае отсутствия свойства async, его значение будет равным true // Тип команды для удаления элемента - Delete batchCmd: "Delete", // Отображаемое наименование списка / библиотеки listName: "<Имя списка/библиотеки>", // Идентификатор удаляемого элемента ID: "<Идентификатор элемента, например: 42>", // Функция, выполняемая по результату работы веб-сервиса completefunc: function(xData, Status) {} });
Множественное удаление - так же используем метод SPUpdateMultipleListItems. Пример:
$().SPServices.SPUpdateMultipleListItems({ listName: "<Имя списка/библиотеки>", CAMLQuery: "<Query><Where><Eq><FieldRef Name='Status'/>"+ "<Value Type='Text'>Не действующий</Value>"+ "</Eq></Where>", batchCmd: "Delete" });
Как видно, код получается стройным, можно достойно снизить объем "макоронных изделий", особенно оценят адепты jQuery.
SPServices может значительно снизить трудоемкость разработки клиентской логики, конечно если Вы не противник jQuery в проекте SharePoint (хотя сам Microsoft использует форк jQuery под названием mQuery в SharePoint 2013) или принципиально хотите JSOM в своих проектах (особенно в силу значимых изменений в CSOM и веб-сервисах в новой версии платформы).
Кстати, в SharePoint 2013 SPServices тоже отлично работают, как и в 2010.
UPD: CRUD операции с элементами списков SharePoint на чистом JSOM.
Опубликовано: 25.09.2012
Автор: Андрей Кольтяков