Zoeken…


Opmerkingen

REST Service-eindpunt-URL's

De REST-API voor clienttoegang werd voor het eerst geïntroduceerd in SharePoint 2010, maar werd sterk uitgebreid in SharePoint 2013. De REST API in SharePoint 2010 is toegankelijk via de ListData-webservice op de URL /_vti_bin/ListData.svc . SharePoint 2013 introduceerde de /_api/lists/ en /_api/web eindpunt-URL's, die zich enigszins anders gedragen.

De bovenstaande eindpunt-URL's moeten worden voorafgegaan door http://server/site waarbij server de naam van de server vertegenwoordigt en site de naam van, of het pad naar, de specifieke site.

Voorbeeld-URL voor ... SharePoint 2010 SharePoint 2013
Een lijst ophalen: /_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
Een item ophalen: /_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
Een web ophalen: (geen equivalent) /_api/web

Ondanks de verschillen in toegang tot lijsten en lijstitems, is het werken met die resultaten in beide versies erg vergelijkbaar.

Merk op dat de service ListData.svc nog steeds beschikbaar is in SharePoint 2013 voor achterwaartse compatibiliteit.

REST-aanvragen verzenden

Een REST-aanvraag kan worden ingediend via een native JavaScript XMLHttpRequest of via de jQuery AJAX wrapper-constructie.

XMLHttpRequest-syntaxis

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

jQuery AJAX Syntaxis

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

Zie de JavaScript AJAX-documentatie voor meer informatie over het verzenden van aanvragen via AJAX.

Werken met lijsten

Lijstitems ophalen

Dit voorbeeld laat zien hoe alle lijstitems kunnen worden opgehaald en doorlopen. U kunt de top parameter gebruiken om een bepaald aantal resultaten op te vragen. U kunt ook het gebruik select parameter om bepaalde velden te selecteren ( $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);
        }
    });
    }

Een individueel lijstitem ophalen

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);
        }
    });
    }

Lijstitems ophalen met opzoekkolommen

Soms heb je een lijststructuur die er zo uitziet:

Lijst met dieren

Naam Type Beschrijving
Titel String (tekst) Naam van het dier
Leeftijd Aantal Hoe oud is het dier
Waarde Valuta Waarde van het dier
Type Opzoeken (tabel met diertypen) Opzoekveld (geeft vervolgkeuzelijst met keuzes uit de tabel Diertypen)

Dierentypentabel

Naam Type Beschrijving
Titel String (tekst) Naam van de soort / diertype (bijv. Varken)
NumLegs Aantal Aantal poten op het dier

Waarschijnlijk niet het meest serieuze voorbeeld, maar het probleem hier is nog steeds geldig. Wanneer u het gebruikelijke verzoek gebruikt om waarden uit de SharePoint-lijst op te halen, voor het Type van het dier, krijgt u alleen een veld terug met de naam TypeId in het JSON-antwoord. Om deze items in slechts één AJAX-aanroep uit te breiden, is wat extra opmaak vereist in de URL-parameters.

Dit voorbeeld is ook van toepassing op meer dan alleen opzoekkolommen. Wanneer u de kolommen People/Groups , zijn dit in feite alleen maar zoekopdrachten, zodat u eenvoudig items zoals Title , EMail en andere items kunt EMail .

Voorbeeld code

Belangrijke opmerking : wanneer u de velden definieert die u wilt terughalen uit de opzoekkolommen, moet u de naam van het veld voorafgaan door de naam van het opzoekveld in de oorspronkelijke tabel. Als u bijvoorbeeld het kenmerk NumLegs uit de NumLegs wilt NumLegs , moet u 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();

Selecties toevoegen aan een opzoekveld met meerdere waarden

In dit voorbeeld wordt ervan uitgegaan dat uw MultiLookupColumnName naam MultiLookupColumnName en dat u uw multi-opzoekveld wilt instellen om op te zoeken naar de items met ID 1 en 2.

JQuery AJAX gebruiken

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 gebruiken

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);

Pagerlijst-items geretourneerd uit een zoekopdracht

Om paging te simuleren met REST, kunt u het volgende doen:

  1. Gebruik de parameter $skip=n om de eerste n vermeldingen over te slaan volgens de parameter $orderby

  2. Gebruik de parameter $top=n om de bovenste n invoer te retourneren volgens de parameters $orderby en $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();
            }
        }
    );
}

Haal een ID op van een nieuw gemaakt item in de SharePoint-lijst

Dit voorbeeld laat zien hoe u een ID van een nieuw gemaakt item kunt ophalen met de SharePoint REST API.

Notitie :

listName - Deze variabele bevat de naam van uw lijst.

newItemBody - Dit wordt uw hoofdtekst voor het toevoegen van een nieuw item aan de lijst.

bijv. var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Titel: 'Sommige titelwaarde'};

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-bewerkingen uitvoeren met de SharePoint 2010 REST-interface

creëren

Om een Create-bewerking via REST uit te voeren, moet u de volgende acties uitvoeren:

Maak een HTTP-verzoek met het POST werkwoord. Gebruik de service-URL van de lijst waaraan u een entiteit wilt toevoegen als doel voor de POST. Stel het inhoudstype in op application/json . Serialiseer de JSON-objecten die uw nieuwe lijstitems vertegenwoordigen als een tekenreeks en voeg deze waarde toe aan het JavaScript-voorbeeld van de aanvraag:

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);
        }
    });
}

Gebruik

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));
  }
);

Lezen

Om een leesbewerking via REST uit te voeren, moet u de volgende acties uitvoeren:

Maak een HTTP-verzoek met het werkwoord GET . Gebruik de service-URL van het lijstitem waaraan u een entiteit wilt toevoegen als doel voor de GET. Stel het inhoudstype in op application/json . JavaScript-voorbeeld:

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);
        }
    });
}

Gebruik

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

Bijwerken

Om een bestaande entiteit bij te werken, moet u de volgende acties uitvoeren:

Maak een HTTP-verzoek met het POST werkwoord. Voeg een X-HTTP-Method header met de waarde MERGE . Gebruik de service-URL van het lijstitem dat u wilt bijwerken als het doel voor de POST Voeg een If-Match kop toe met een waarde van de oorspronkelijke ETag van de entiteit, of *. JavaScript-voorbeeld:

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);
   });

}

Gebruik

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));
  }
);

Delete

Om een entiteit te verwijderen, moet u de volgende acties uitvoeren:

Maak een HTTP-verzoek met het POST werkwoord. Voeg een X-HTTP-Method header toe met de waarde DELETE . Gebruik de service-URL van het lijstitem dat u wilt bijwerken als het doel voor de POST Voeg een If-Match kop toe met een waarde van de oorspronkelijke ETag van de entiteit. JavaScript-voorbeeld:

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);
   });
}

Gebruik

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow