Доступ к определенному элементу изменения с помощью Sharepoint REST API

Я пытаюсь получить отдельное событие изменения, используя;

GET * https://{sitecollection}/{personal/user_name_domain_onmicrosoft_com}/_api/web/getchanges('query')/item

Справка

http://msdn.microsoft.com/en-us/data/jj246759(v=office.12).aspx

И

http://msdn.microsoft.com/en-us/library/office/jj246759(v=office.15).aspx

Я не могу заставить его работать, и я не могу найти ни одного примера этого вызова.

Я пытаюсь что-то вроде;

ПОЛУЧИТЬ

  • https://{sitecollection}/{personal/user_name_domain_onmicrosoft_com}/_api/web/getchanges('Add=true,Item=true')/item

  • https://{sitecollection}/{personal/user_name_domain_onmicrosoft_com}/_api/web/getchanges(query='Add=true,Item=true')/item

но не повезло.

К вашему сведению:: я не пытаюсь получить журнал изменений с помощью этого звонка. Я пытаюсь получить отдельный элемент изменения. Но поскольку синтаксис такой, я помещаю случайный запрос в эти фигурные скобки. /getchanges (вызов POST) работает нормально.

Любая помощь в этом?


person Syed Mauze Rehan    schedule 13.09.2014    source источник


Ответы (3)


Есть как минимум два варианта построения запроса для конечной точки ChangeCollection:

Вариант 1

Сообщение ChangeQuery через тело запроса

function getChanges(webUrl,queryOptions,success,failure)
{
   var changeQueryPayload = { 
       'query':{ 
           '__metadata': { 'type': 'SP.ChangeQuery' },  
        } 
   };
   for(var key in queryOptions) {
       changeQueryPayload['query'][key] = queryOptions[key];
   }

   $.ajax({
      type: "POST", 
      headers: { 
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
      }, 
      data: JSON.stringify(changeQueryPayload),
      url: webUrl + '/_api/web/getchanges', 
      success: success,
      failure: failure 
   });
}

Вариант 2

Передать выражение ChangeQuery через строку запроса:

function getChanges(webUrl,queryOptions, success,failure)
{
   $.ajax({
      type: "POST", 
      headers: { 
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
      },
      url: webUrl + '/_api/web/getchanges(@qry)?@qry=' + JSON.stringify(queryOptions) + , 
      success: success,
      failure: failure 
   });
}

Пример

Получить обновления для сети:

var queryOptions = {"Update":true,"Web":true};


getChanges(_spPageContextInfo.webAbsoluteUrl,queryOptions,
  function(result){
      var changes = result.d.results;
      //print info
      console.log('Found ' + changes.length + ' items');   
  },
  function(error){
     console.log(JSON.stringify(error)); 
  }); 

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

person Vadim Gremyachev    schedule 13.09.2014
comment
Итак, это в значительной степени сводится к -> я не могу получить индивидуальное изменение, я получаю группу событий, и из этого я могу получить изменение. На самом деле меня интересовал вызов /item, ссылки, которыми я поделился, говорят об этом, поэтому я подумал, что, может быть, я мог бы получить индивидуальное изменение, выполнив что-то вроде /getchanges(query)/item. Хотя у меня есть работающий вызов /getchanges (вариант 1), я пробовал вариант 2, и он выдал мне эту ошибку -> От клиента было обнаружено потенциально опасное значение Request.Path (:). URL-> POST https://{tenantName}-my.sharepoint.com/{my_site}/_api/web/getchanges('{Web: true, Update: true}') - person Syed Mauze Rehan; 14.09.2014
comment
Правильно, получить индивидуальное изменение не представляется возможным. - person Vadim Gremyachev; 14.09.2014

Пример: http://msdn.microsoft.com/en-us/library/office/dn499819(v=office.15).aspx

executor.executeAsync({
  url: "<app web url>/_api/SP.AppContextSite(@target)/web/getchanges?@target='<host web url>'",
  method: "POST",
  body: "{ 'query': { '__metadata': { 'type': 'SP.ChangeQuery' }, 'Web': true, 'Update': true } }",
  headers: {
    "accept": "application/json;odata=verbose",
    "content-type": "application/json;odata=verbose"
  },
  success: successHandler,
  error: errorHandler
});
person Ruslan Dayanov    schedule 13.09.2014
comment
Я обновил свой вопрос. Это вызов diff (вызов POST), и он отлично работает для меня. Меня интересует отдельный элемент (ChangeItem), поскольку вы можете видеть /item в конце звонка, который я пытался выполнить. - person Syed Mauze Rehan; 13.09.2014
comment
@SyedMauzeRehan Удалось ли вам получить отдельный предмет? Как вы решили проблему. У меня аналогичная проблема, когда мне нужно знать подробности SP.ChangeItem. - person objectone; 27.02.2015
comment
Мне удалось получить отдельные элементы, но это не возвращает мне все данные, которые я хочу _api/web/Lists/getbytitle('Documents')/items?$filter=Id eq 48 - person objectone; 27.02.2015
comment
Нет, это сам предмет. Я искал событие изменения целиком. то есть изменение в журналах изменений, дающее все подробности о том, что это было. Прямо сейчас я получаю только затронутый список, идентификатор элемента, тип изменения и т. д. Я искал что-то более подробное, но не смог найти. - person Syed Mauze Rehan; 28.02.2015

См. https://msdn.microsoft.com/en-us/library/office/dn499819.aspx.

Следующий код работает для меня.

$.ajax({
    url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/getchanges", 
    type: "POST",
    data: "{ 'query': { '__metadata': { 'type': 'SP.ChangeQuery' },'Web': true, 'Update': true, 'Add': true } }",
    headers: { "accept": "application/json;odata=verbose", "content-type": "application/json;odata=verbose",'X-RequestDigest':$('#__REQUESTDIGEST').val() },
    success: successHandler,
    error: errorHandler
});

function successHandler(data, textStatus, jqXHR ){
    alert("successHandler " + "textstatus:" +textStatus + "data: " + data);
}

function errorHandler(xhr, ajaxOptions, thrownError) {
    alert('Request failed: ' + xhr.status + '\n' + thrownError + '\n' + xhr.responseText);
}
person Dipal Bhavsar    schedule 28.07.2015