Поиск…


замечания

URL-адрес конечной точки службы REST

API доступа клиента REST был впервые представлен в SharePoint 2010, но был значительно расширен в SharePoint 2013. API REST в SharePoint 2010 доступен через веб-службу /_vti_bin/ListData.svc URL-адресу /_vti_bin/ListData.svc . В SharePoint 2013 были введены URL-адреса /_api/lists/ and /_api/web endpoint, которые ведут себя несколько иначе.

Вышеуказанным URL-адресам конечных точек должен предшествовать http://server/site где server представляет имя сервера, а site представляет собой имя или путь к определенному сайту.

Пример URL для ... SharePoint 2010 SharePoint 2013
Получение списка: /_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
Получение элемента: /_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
Получение веб-страницы: (без эквивалента) /_api/web

Несмотря на различия в доступе к спискам и элементам списка, работа с этими результатами очень схожа в обеих версиях.

Обратите внимание, что служба ListData.svc по-прежнему доступна в SharePoint 2013 для обратной совместимости.

Отправка запросов REST

Запрос REST может быть отправлен через собственный XMLHttpRequest JavaScript или через конструкцию оболочки jQuery AJAX.

Синтаксис XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

Синтаксис JQuery AJAX

$.ajax({
    method: verb,
    url: url,
    headers: { "Content-Type":"application/json" },
    data: data
});

Подробнее о отправке запросов через AJAX см. В документации JavaScript AJAX .

Работа со списками

Получение элементов списка

В этом примере показано, как извлекать все элементы списка и проходить через них. Вы можете использовать top параметр для запроса определенного количества результатов. Вы также можете использовать параметр select для выбора определенных полей ( $select=id, Title, uri ).

JavaScript

function GetListItems(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items?$top=50"
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            $.each(data.d.results, function(index,item){
                //use item to access the individual list item
                console.log(item.Id);
            });
        },
        error: function(error){
            console.log(error);
        }
    });
    }

Получение отдельного элемента списка

JavaScript

function GetListItem(){
    $.ajax({
        url: "../_api/web/lists/getbytitle('List Title')/items(1)",
        contentType: "application/json;odata=verbose",
        method: "GET",
        headers: { "accept": "application/json;odata=verbose" },
        success: function (data) {
            console.log(data.d.Id);
        },
        error: function(error){
            console.log(error);
        }
    });
    }

Получить элементы списка с колонками поиска

Иногда у вас может быть структура списка, которая выглядит так:

Список листинга животных

название Тип Описание
заглавие Строка (текст) Название животного
Возраст Число Сколько лет животное
Значение валюта Значение животного
Тип Поиск (таблица типов животных) Поле поиска (дает раскрывающийся список вариантов из таблицы типов животных)

Таблица видов животных

название Тип Описание
заглавие Строка (текст) Название вида / вида животных (например, свиньи)
NumLegs Число Количество ног на животном

Вероятно, это не самый серьезный пример, но проблема здесь остается в силе. Когда вы используете обычный запрос для извлечения значений из списка SharePoint, для Type животного вы получите только поле TypeId в ответе JSON. Чтобы развернуть эти элементы только в одном вызове AJAX, в параметрах URL требуется дополнительная разметка.

Этот пример применим не только к столбцам поиска. Когда вы используете столбцы « People/Groups , они, по сути, просто ищут, поэтому вы можете легко переносить такие предметы, как Title , EMail и другие.

Пример кода

Важное примечание . Когда вы определяете поля, которые хотите вернуть из столбцов поиска, вы должны указать имя поля с именем поля поиска в исходной таблице. Например, если вы хотите вернуть атрибут NumLegs из столбца поиска, вы должны ввести Type/NumLegs .

JavaScript

// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle: The name of the list you want to query
// selectFields: the specific fields you want to get back
// expandFields: the name of the fields that need to be pulled from lookup tables
// callback: the name of the callback function on success
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
    endpointUrl+= '?$select=' + selectFields.join(",");
    endpointUrl+= '&$expand=' + expandFields.join(",");
    return executeRequest(endpointUrl,'GET', callback);
}

function executeRequest(url,method,callback,headers,payload) 
{
    if (typeof headers == 'undefined'){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
    url: url,   
    type: method,  
    contentType: "application/json;odata=verbose",
    headers: headers,
    success: function (data) { callback(data) }
    };
    if(method == "POST") {
    ajaxOptions.data = JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

// Setup the ajax request by setting all of the arguments to the getItems function
function getAnimals() {
    var url = "https://www.contoso.com/sites/animals";
    var listTitle = "AnimalListing";
    
    var selectFields = [
        "Title",
        "Age",
        "Value",
        "Type/Title",
        "Type/NumLegs"
    ];

    var expandFields = [
        "Type/Title",
        "Type/NumLegs"
    ];

    getItems(url, listTitle, selectFields, expandFields, processAnimals);
}

// Callback function
// data: returns the data given by SharePoint
function processAnimals(data) {
    console.log(data);
    // Process data here
}

// Start the entire process
getAnimals();

Добавление выбора в многозначное поле поиска

В этом примере предполагается, что столбец поиска называется MultiLookupColumnName и что вы хотите настроить поле поиска нескольких поисковых MultiLookupColumnName на элементы с идентификаторами 1 и 2.

Использование jQuery AJAX

2010
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/"+listName+"("+idOfItemToUpdate+")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});
2013
var listGuid = "id-of-list-to-update"; // use list GUID here
var lookupGuid = "id-of-lookup-list"; // use lookup list GUID here
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")";
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
$.ajax({
    method: 'POST',
    url: url,
    contentType: 'application/json',
    headers: {
      "X-HTTP-Method" : "MERGE",
      "If-Match" : "*"
    },
    data: data
});

Использование XMLHttpRequest

2010
var listName = "YourListName";
var lookupList = "LookupListName";
var idOfItemToUpdate = 1;
var url = "/server/site/_vti_bin/ListData.svc/YourListName("+idOfItemToUpdate+")";
var data = JSON.stringify({
    MultiLookupColumnName:[
       {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_vti_bin/ListData.svc/"+lookupList+"(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
2013
var listGuid = "id-of-list-to-update";
var lookupGuid = "id-of-lookup-list";
var idOfItemToUpdate = 1;
var url = "/server/site/_api/lists('"+ listGuid + "')/items("+ idOfItemToUpdate + ")"; 
var data = JSON.stringify({
    MultiLookupColumnName:[
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(1)"}},
        {__metadata:{uri:"http://yoursiteurl/_api/lists('" + lookupGuid + "')/items(2)"}}
    ]
});
var xhr = new XMLHttpRequest();
xhr.open("POST",url,true);
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
xhr.setRequestHeader("If-Match", "*");
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

Элементы списка подкачки, возвращаемые из запроса

Чтобы смоделировать пейджинг с помощью REST, вы можете сделать следующее:

  1. Используйте параметр $skip=n чтобы пропустить первые n записей в соответствии с параметром $orderby

  2. Используйте параметр $top=n чтобы вернуть верхние n записей в соответствии с параметрами $orderby и $skip .

var endpointUrl = "/_api/lists('guid')/items"; // SP2010: "/_vti_bin/ListData.svc/ListName";
$.getJSON(
    endpointUrl + "?$orderby=Id&$top=1000",
    function(data){
        processData(data); // you can do something with the results here
        var count = data.d.results.length;
        getNextBatch(count, processData, onComplete); // fetch next page 
    }
);

function getNextBatch(totalSoFar, processResults, onCompleteCallback){
    $.getJSON(
        endpointUrl + "?$orderby=Id&$skip="+totalSoFar+"&$top=1000",
        function(data){
            var count = data.d.results.length;
            if(count > 0){
                processResults(data); // do something with results
                getNextBatch(totalSoFar+count, callback); // fetch next page
            }else{
                onCompleteCallback();
            }
        }
    );
}

Получить идентификатор вновь созданного элемента в списке SharePoint

В этом примере показано, как получить идентификатор вновь созданного элемента с помощью API REST SharePoint.

Замечания :

listName - эта переменная содержит имя вашего списка.

newItemBody - это будет ваш орган запроса для добавления нового элемента в список.

например var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Title: 'Some title value'};

function CreateListItemWithDetails(listName, newItemBody) {

    var item = newItemBody;
    return $.ajax({
        url: _spPageContextInfo.siteAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "content-Type": "application/json;odata=verbose"
        }

    });
}

CreateListItemWithDetails(listName, newItemBody)
    .then(function(data){
        //success callback
        var NewlyCreatedItemId = data.d.ID;
    }, function(data){
        //failure callback
    });

Как выполнять операции CRUD с использованием интерфейса REST SharePoint 2010

Создайте

Чтобы выполнить операцию Create через REST, вы должны выполнить следующие действия:

Создайте HTTP-запрос, используя глагол POST . Используйте URL-адрес службы, в который вы хотите добавить объект в качестве цели для POST. Задайте тип содержимого для application/json . Сериализуйте объекты JSON, которые представляют ваши новые элементы списка как строку, и добавьте это значение в тело запроса. Пример JavaScript:

function createListItem(webUrl,listName, itemProperties, success, failure) {

    $.ajax({
        url: webUrl + "/_vti_bin/listdata.svc/" + listName,
        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);
        }
    });
}

использование

var taskProperties = {
    'TaskName': 'Order Approval',
    'AssignedToId': 12
};

createListItem('https://contoso.sharepoint.com/project/','Tasks',taskProperties,function(task){
    console.log('Task' + task.TaskName + ' has been created'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

Читать

Чтобы выполнить операцию чтения через REST, вы должны выполнить следующие действия:

Создайте HTTP-запрос, используя GET глагол. Используйте URL-адрес службы элемента списка, к которому вы хотите добавить объект в качестве цели для GET. Задайте тип содержимого для application/json . Пример JavaScript:

function getListItemById(webUrl,listName, itemId, success, failure) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data.d);
        },
        error: function (data) {
            failure(data.responseJSON.error);
        }
    });
}

использование

getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
    console.log(taskItem.TaskName); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

Обновить

Чтобы обновить существующий объект, вы должны выполнить следующие действия:

Создайте HTTP-запрос, используя глагол POST . Добавьте заголовок X-HTTP-Method со значением MERGE . Используйте URL-адрес службы элемента списка, который вы хотите обновить, в качестве цели для POST. Добавить заголовок If-Match со значением исходного ETag объекта или *. Пример JavaScript:

function updateListItem(webUrl,listName,itemId,itemProperties,success, failure)
{
   getListItemById(webUrl,listName,itemId,function(item){

      $.ajax({
         type: 'POST',
         url: item.__metadata.uri,
         contentType: 'application/json',
         processData: false,
         headers: {
                "Accept": "application/json;odata=verbose",
                "X-HTTP-Method": "MERGE",
                "If-Match": item.__metadata.etag
         },
         data: Sys.Serialization.JavaScriptSerializer.serialize(itemProperties),
         success: function (data) {
                success(data);
         },
         error: function (data) {
                failure(data);
         }
      });

   },
   function(error){
       failure(error);
   });

}

использование

var taskProperties = {
    'TaskName': 'Approval',
    'AssignedToId': 12  
};


updateListItem('https://contoso.sharepoint.com/project/','Tasks',2,taskProperties,function(item){
    console.log('Task has been updated'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);

удалять

Чтобы удалить объект, необходимо выполнить следующие действия:

Создайте HTTP-запрос, используя глагол POST . Добавьте заголовок X-HTTP-Method со значением DELETE . Используйте URL-адрес службы элемента списка, который вы хотите обновить, в качестве цели для POST. Добавить заголовок If-Match со значением исходного ETag объекта. Пример JavaScript:

function deleteListItem(webUrl, listName, itemId, success, failure) {
    getListItemById(webUrl,listName,itemId,function(item){
        $.ajax({
            url: item.__metadata.uri,
            type: "POST",
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-Http-Method": "DELETE",
                "If-Match": item.__metadata.etag
            },
            success: function (data) {
                success();
            },
            error: function (data) {
                failure(data.responseJSON.error);
            }
        });
    },
   function (error) {
       failure(error);
   });
}

использование

deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
    console.log('Task has been deleted'); 
  },
  function(error){
    console.log(JSON.stringify(error));
  }
);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow