Javascript с конечной точкой REST SharePoint 2013 INSERT в список?

Вот что я собираюсь использовать:

  • SharePoint 2013
  • Javascript
  • Конечная точка REST
  • Список SharePoint (название: "Объявления")
  • Веб-сайт (название: "example.com")

Ссылки:

Очень просто:

  • Как мне ВСТАВИТЬ новый элемент (строку) в список, пожалуйста?

Я пытался:

$.ajax({
    url: "https://example.com/_api/web/lists/getbytitle('Announcements')/items",
    type: "POST",
    contentType: "application/json;odata=verbose",
    data: JSON.stringify( { '__metadata': { 'type': 'SP.Data.AnnouncementListItem' }, "Title": "New Announcement!" } ),
    headers: {
        "Accept": "application/json;odata=verbose",
        "Authorization": "Bearer " + accessToken
        "X-RequestDigest": form digest value,
        "IF-MATCH": etag,
    },
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log(data);
    }
});

Тогда я знаю, что многое идет не так, особенно в разделе headers. Но что это означает:

  • Authorization
  • accessToken
  • X-RequestDigest
  • IF-MATCH

.. а затем КАК получить эти значения (с помощью JavaScript)? Так что:

  • Каковы всегда точные обязательные поля там?
  • И как/откуда взять эти значения?

Я до сих пор не могу найти простой и полный пример правильного выполнения этого Update / Insert.


person 夏期劇場    schedule 14.04.2015    source источник
comment
возможный дубликат Как я могу получить доступ oauth токен в sharepoint 2013?   -  person Luizgrs    schedule 14.04.2015


Ответы (2)


Итак, есть два способа, которые я использовал для отправки элемента в список: библиотека jQuery SPServices и REST API. SPServices действительно хорошо документирован здесь. Использование REST API намного быстрее и довольно просто!

function createListItem(itemProperties, success, failure) {
  $.ajax({
    url: "https://example.com/_vti_bin/listdata.svc/Announcements",
    type: "POST",
    processData: false,
    contentType: "application/json;odata=verbose",
    data: JSON.stringify(itemProperties),
    headers: {
      "Accept": "application/json;odata=verbose"
    },
    success: function(data) {
      success(data.d);
    },
    error: function(data) {
      // failure(data.responseJSON.error);
      alert("error");
    }
  });
}

Первое, что я делаю выше, — это создание функции, которую вы можете вызывать всякий раз, когда хотите создать новый элемент списка. Параметр itemProperties можно заполнить нужными вам полями, см. ниже.

var Title = "Title";
var Answer = "Answer";
var userid = _spPageContextInfo.userId;

var taskProperties = {
  'Title': Title,
  'Answer': Answer,
  'UserId': userid
};

Затем все, что нам нужно сделать, это вызвать эту функцию с новой переменной, которую мы только что объявили.

createListItem(taskProperties, function(task) {
    alert("Thank you for your input!");

  },
  function(error) {
    console.log(JSON.stringify(error));
  }
);
person moon    schedule 15.04.2015
comment
Привет луна, большое спасибо за это. Нужно ли мне по-прежнему помещать `X-RequestDigest: $(#__REQUESTDIGEST).val()` в раздел headers: ? Потому что он все еще не сохраняется. А может ли url: быть похожим на "https://example.com/_api/web/lists/getbytitle('Announcements')/items"? - person 夏期劇場; 15.04.2015
comment
Но также не показывает ошибку. Вместо этого удалось. Но особо не спасли. - person 夏期劇場; 15.04.2015
comment
@ 夏期 劇場 Я не использовал X-RequestDigest, поэтому попробуйте сделать это без предварительного просмотра, чтобы увидеть, работает ли он. Если вы используете приложение, размещенное в SharePoint, попробуйте выполнить "X-RequestDigest": $("#__REQUESTDIGEST").val(). Что касается URL-адреса, я думаю, вы можете удалить /items из URL-адреса, который вы использовали, и это должно работать. "https://example.com/_api/web/lists/getbytitle('Announcements')" - person moon; 15.04.2015
comment
Привет, @moon, еще раз спасибо. Но я все еще не сохраняю предметы. Требуется ли заголовок Authorization: ? Я пытался вызвать файл .js из мастер-страницы. И еще один способ, поместив все коды внутри SP WebPart (ScriptEditor), так что я предполагаю, что авторизация не требуется. Я прав, пожалуйста? - person 夏期劇場; 15.04.2015
comment
@夏期劇場 не могли бы вы опубликовать, как выглядит ваш текущий код в jsFiddle, и поделиться ссылкой здесь? - person moon; 15.04.2015
comment
Привет, луна, не обращай внимания на описанный выше подход. Теперь я узнал другой подход, и он работает. Вот мои коды в jsFiddle: jsfiddle.net/dzyts8f4/1 - person 夏期劇場; 16.04.2015

На самом деле jsfiddle, который вы разместили в предыдущем отзыве, не является REST. вы просто используете клиентскую объектную модель SharePoint. найдите ниже модель REST API, надеюсь, она сработает

var cat = {
    "__metadata": { "type": ItemType },
    "Title": "GenIT-Issue",
}
$.ajax({
    url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('Tickets')/items",
    type: "POST",
    contentType: "application/json;odata=verbose",
    data: JSON.stringify(cat),
    headers: {
        "Accept": "application/json;odata=verbose",
        "X-RequestDigest": $("#__REQUESTDIGEST").val()
    },
    success: function (data) {

    },
    error: function (data) {
    }
});

Я запускаю этот код на своей странице SharePoint, поэтому аутентификация не требуется. он будет работать с правами текущего пользователя

person Ravin Singh D    schedule 16.04.2015