sharepoint
REST-services
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
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
});
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
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);
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:
Gebruik de parameter
$skip=n
om de eersten
vermeldingen over te slaan volgens de parameter$orderby
Gebruik de parameter
$top=n
om de bovensten
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));
}
);