-->

вторник, 12 мая 2015 г.

REST запросы /_vti_bin/ и /_api/web/ в SahrePoint

Решил по лучше узнать REST (т.к. от CSOM рекомендуют уходить постепенно), но возникли некоторые сложности, т.к. присутствует локализация SharePoint (установлен языковой пакет) и выглядит вот так:
При обращении к элементу списка Employees

получаем отображаемые названия полей
через JavaScript (предварительно подключив jQuery)


_spBodyOnLoadFunctionNames.push("getEmployees");
function getEmployees()
{
  $.getJSON(_spPageContextInfo.webAbsoluteUrl + "/_vti_bin/listdata.svc/Employees?$select=Создано,Название",
  function (data) {  
    console.log(data)
  });
} 
получаем

согласитесь, что это не удобно
как решение использовать не /_vti_bin/, а /_api/web/

http://site/_api/web/lists/GetByTitle('Employees')/items(1)?$select=Title
получаем

через JavaScript (предварительно подключив jQuery)
_spBodyOnLoadFunctionNames.push("getEmployees");
function getEmployees()
{
  var request = $.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Employees')/items?$select=Title",
    type: "GET",
    headers: {"Accept": "application/json;odata=verbose"},
    cache:false,                
    success: function(data){  
      console.log("моя функция")
      }
   });
      
  request.done(function (data){ console.log('данные REST получены, объектов - ' + data.d.results.length); 
          console.log(data)
         });  
  request.fail(function (){console.log('Ошибка при выполнении запроса REST')}); 
} 

на выходе


как уже могли заметить данные получаем не через $.getJSON(), а через $.ajax(), т.к. на нужено передать свойство headers: {"Accept": "application/json;odata=verbose"}, что бы нам вернулся JSON
так же я добавил обработчики .done() и fail(), что бы выводить информацию по результатам выполнения запроса REST