Базовые операции с элементами списков с помощью JSOM
В статье представлены базовые операции с элементами списков SharePoint с помощью JSOM:
- Получение элементов списков;
- Создание новых элементов;
- Изменение и обновление элементов;
- Удаление элементов.
Получение перечня элементов списка:
var getListItems = function getListItemsF() { // Получение контекста по URL /* var siteUrl = '/sites/data'; var clientContext = new SP.ClientContext(siteUrl); */ // Получение текущего контекста var clientContext = new SP.ClientContext.get_current(); // Получение элементов var oListItems = clientContext .get_web() .get_lists() // Получение списков .getByTitle('Настраиваемый список') .getItems(''); // Получение всех элементов // .getItemById(<ИД_элемента>); // Получение определенного элемента по ИД // Получение элементов на основании CAML запроса // Конструктор CAML запроса /* var query = '<View Scope='RecursiveAll'>' + '<Query>' + '<Where>' + '<Eq>' + '<FieldRef Name='Status' />' + '<Value Type='Text'>В работе</Value>' + '</Eq>' + '</Where>' + '</Query>' + '</View>'; var camlQuery = new SP.CamlQuery(); camlQuery.set_viewXml(query); // Используем camlQuery в .getItems(camlQuery) */ // Загрузка элементов списка var itemsArr = clientContext .loadQuery(oListItems, 'Include(ID,Title)'); // Мы хотим минифицировать трафик, получая только заданные в Include поля clientContext.executeQueryAsync( function () { for (var i = 0, len = itemsArr.length; i < len; i++) { console.log("Элемент: ", itemsArr[i].get_fieldValues()); } }, // Функция, которая отработает в случае ошибки function(sender, args) { alert('Произошла ошибка. ' + args.get_message() + ' ' + args.get_stackTrace()); // ... } ); }; getListItems();
Зачастую можно увидеть конструкцию:
clientContext.executeQueryAsync( Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed) ); } function onQuerySucceeded(sender, args) { // ... } function onQueryFailed(sender, args) { alert('Request failed. ' + args.get_message() + ' ' + args.get_stackTrace()); }
В примерах колбэки в отдельные имнованные функции выделять не буду.
Создание нового элемента списка:
var createListItem = function createListItemF() { // Получение текущего контекста var clientContext = new SP.ClientContext.get_current(); // Получение списка по DisplayName //var oList = clientContext.get_web().get_lists().getByTitle('Настраиваемый список'); // Получение списка по GUID списка var oList = clientContext.get_web().get_lists().getById('{D13953FD-BA8E-4C87-BCE3-EEC249336EE5}'); // Определение информации о создании, необходимо чтобы указать папку создания в списке // При создании элемента в корне SP.ListItemCreationInformation можно опустить var itemCreateInfo = new SP.ListItemCreationInformation(); //var folderUrl = '/sites/data/Lists/CustomList/FolderName'; //itemCreateInfo.set_folderUrl(folderUrl); // Добавление нового элемента this.oListItem = oList.addItem(itemCreateInfo); // Заполнение атрибутов с помощью метода set_item и указания пары Field InternalName - значение oListItem.set_item('Title', 'Новый элемент'); // Обновление элемента oListItem.update(); // Загрузка создаваемого элемента в контекст // На текущий момент сервер еще ничего не знает о новом элементе // По сути дела, до выполнения метода executeQueryAsync // на клиенте накапливались инструкции действий clientContext.load(oListItem); // Обращение на сервер за выполнением очереди // Очередь в JSOM выполняется ассинхронно clientContext.executeQueryAsync( // Функция, которая отработает при успешном выполнении очереди function() { alert('Создан элемент: ' + oListItem.get_id()); // ... }, // Функция, которая отработает в случае ошибки function(sender, args) { alert('Произошла ошибка. ' + args.get_message() + ' ' + args.get_stackTrace()); // ... } ); } createListItem();
Изменение элемента списка:
var updateListItem = function updateListItemF() { // Получение текущего контекста var clientContext = new SP.ClientContext.get_current(); // Получение инстанса списка по названию var oList = clientContext.get_web().get_lists().getByTitle('Настраиваемый список'); // Получение элемента по его ИД this.oListItem = oList.getItemById(21); // Обновление атрибутов осуществляется аналогично, как при создании oListItem.set_item('Title', 'Измененный элемент'); // Обновление элемента oListItem.update(); // Обращение на сервер за выполнением очереди clientContext.executeQueryAsync( // Функция, которая отработает при успешном выполнении очереди function() { alert('Элемент изменен'); // ... }, // Функция, которая отработает в случае ошибки function(sender, args) { alert('Произошла ошибка. ' + args.get_message() + ' ' + args.get_stackTrace()); // ... } ); } updateListItem();
Удаление элемента списка:
var deleteListItem = function deleteListItemF() { // Получение текущего контекста var clientContext = new SP.ClientContext.get_current(); // Получение инстанса списка по названию var oList = clientContext .get_web() .get_lists() .getByTitle('Настраиваемый список'); // Получение элемента по его ИД this.oListItem = oList.getItemById(21); // Удаление элемента oListItem.deleteObject(); // Обращение на сервер за выполнением очереди clientContext.executeQueryAsync( // Функция, которая отработает при успешном выполнении очереди function() { alert('Элемент удален'); // ... }, // Функция, которая отработает в случае ошибки function(sender, args) { alert('Произошла ошибка. ' + args.get_message() + ' ' + args.get_stackTrace()); // ... } ); } deleteListItem();
Так же может быть интересна статья, обыгрывающая все те же действия с использованием библиотеки SPServices: http://blog.arvosys.ru/post/sharepoint-spservices-introduction/
Опубликовано: 25.09.2013
Автор: Андрей Кольтяков