sharepoint
REST-Dienste
Suche…
Bemerkungen
URLs für den REST-Service-Endpunkt
Die REST-Clientzugriffs-API wurde erstmals in SharePoint 2010 eingeführt, wurde jedoch in SharePoint 2013 erheblich erweitert. Auf die REST-API in SharePoint 2010 kann über den ListData-Webdienst unter der URL /_vti_bin/ListData.svc
. In SharePoint 2013 wurden die URLs für die Endpunkte /_api/lists/
und /_api/web
, die sich etwas anders verhalten.
Den obigen Endpunkt-URLs sollte http://server/site
vorangestellt werden, wobei server
den Namen des Servers und site
den Namen oder den Pfad zu der bestimmten Site darstellt.
Beispiel-URL für ... | SharePoint 2010 | SharePoint 2013 |
---|---|---|
Eine Liste abrufen: | /_vti_bin/ListData.svc/ListName | /_api/lists('ListGuid') |
Artikel abrufen: | /_vti_bin/ListData.svc/ListName(1) | /_api/lists('ListGuid')/items(1) |
Ein Web abrufen: | (kein Äquivalent) | /_api/web |
Trotz der Unterschiede beim Zugriff auf Listen und Listenelemente ist das Arbeiten mit diesen Ergebnissen in beiden Versionen sehr ähnlich.
Beachten Sie, dass der Dienst ListData.svc
aus ListData.svc
der ListData.svc
in SharePoint 2013 noch verfügbar ist.
Senden von REST-Anforderungen
Eine REST-Anforderung kann über ein natives JavaScript XMLHttpRequest oder über das jQuery AJAX-Wrapper-Konstrukt übermittelt werden.
XMLHttpRequest-Syntax
var xhr = new XMLHttpRequest();
xhr.open(verb, url, true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);
jQuery AJAX-Syntax
$.ajax({
method: verb,
url: url,
headers: { "Content-Type":"application/json" },
data: data
});
Weitere Informationen zum Senden von Anforderungen über AJAX finden Sie in der JavaScript-Dokumentation zu AJAX .
Mit Listen arbeiten
Listenelemente abrufen
Dieses Beispiel zeigt, wie alle Listenelemente abgerufen und durchlaufen werden. Mit dem Parameter top
können Sie eine bestimmte Anzahl von Ergebnissen abfragen. Sie können den select
Parameter auch verwenden, um bestimmte Felder $select=id, Title, uri
( $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);
}
});
}
Einzelnen Listeneintrag abrufen
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);
}
});
}
Listenelemente mit Suchspalten abrufen
Manchmal haben Sie möglicherweise eine Listenstruktur, die wie folgt aussieht:
Tierauflistungstabelle
Name | Art | Beschreibung |
---|---|---|
Titel | Zeichenfolge (Text) | Name des Tieres |
Alter | Nummer | Wie alt ist das Tier? |
Wert | Währung | Wert des Tieres |
Art | Nachschlagen (Tierartentabelle) | Nachschlagefeld (Dropdown-Auswahl aus der Animal Types Table) |
Tabelle der Tierarten
Name | Art | Beschreibung |
---|---|---|
Titel | Zeichenfolge (Text) | Name der Art / Tierart (zB Schwein) |
NumLegs | Nummer | Anzahl der Beine am Tier |
Wahrscheinlich nicht das ernsteste Beispiel, aber das Problem ist hier immer noch gültig. Wenn Sie die übliche Anforderung zum Abrufen von Werten aus der SharePoint-Liste für den Type
des Tieres verwenden, erhalten Sie nur ein Feld mit dem Namen TypeId
in der JSON-Antwort. Um diese Elemente in nur einem einzigen AJAX-Aufruf zu erweitern, sind einige zusätzliche Markierungen in den URL-Parametern erforderlich.
Dieses Beispiel gilt auch für mehr als nur Suchspalten. Wenn Sie People/Groups
, handelt es sich im Wesentlichen nur um Suchvorgänge, sodass Sie Elemente wie Title
, EMail
problemlos EMail
können.
Beispielcode
Wichtiger Hinweis : Wenn Sie die Felder definieren, die Sie aus den Suchspalten abrufen möchten, müssen Sie dem Namen des Felds den Namen des Suchfelds in der ursprünglichen Tabelle voranstellen. Wenn Sie beispielsweise das NumLegs
Attribut aus der NumLegs
möchten, müssen Sie 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();
Hinzufügen von Auswahlmöglichkeiten zu einem mehrwertigen Suchfeld
In diesem Beispiel wird davon MultiLookupColumnName
, dass Ihre MultiLookupColumnName
Namen MultiLookupColumnName
und dass Sie Ihr Multi-Lookup-Feld so einrichten möchten, dass nach den Elementen mit den IDs 1 und 2 MultiLookupColumnName
.
JQuery AJAX verwenden
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
});
Verwendung von XMLHttpRequest
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);
Auslagerungslistenelemente, die von einer Abfrage zurückgegeben wurden
Um das Paging mit REST zu simulieren, haben Sie folgende Möglichkeiten:
Verwenden Sie den Parameter
$orderby
$skip=n
, um die erstenn
Einträge gemäß dem Parameter$orderby
zu überspringenVerwenden Sie den Parameter
$top=n
, um die erstenn
Einträge gemäß den Parametern$orderby
und$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();
}
}
);
}
Rufen Sie eine ID des neu erstellten Elements in der SharePoint-Liste ab
In diesem Beispiel wird gezeigt, wie eine ID eines neu erstellten Elements mithilfe der SharePoint-REST-API abgerufen wird.
Hinweis :
listName - Diese Variable enthält den Namen Ihrer Liste.
newItemBody - Dies ist Ihre Anforderung, um ein neues Element in der Liste hinzuzufügen.
zB var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Titel: '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
});
So führen Sie CRUD-Vorgänge mithilfe der SharePoint 2010-REST-Schnittstelle durch
Erstellen
Um einen Create-Vorgang über REST durchzuführen, müssen Sie die folgenden Aktionen ausführen:
Erstellen Sie eine HTTP-Anforderung mit dem POST
Verb. Verwenden Sie die Service-URL der Liste, zu der Sie eine Entität hinzufügen möchten, als Ziel für den POST. Setzen Sie den Inhaltstyp auf application/json
. Serialisieren Sie die JSON-Objekte, die Ihre neuen Listenelemente als Zeichenfolge darstellen, und fügen Sie diesen Wert zum JavaScript-Beispiel des Anforderungskörpers hinzu:
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);
}
});
}
Verwendungszweck
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));
}
);
Lesen
Um einen Lesevorgang über REST auszuführen, müssen Sie die folgenden Aktionen ausführen:
Erstellen Sie eine HTTP-Anforderung mit dem Verb GET
. Verwenden Sie die Service-URL des Listenelements, zu dem Sie eine Entität hinzufügen möchten, als Ziel für den GET. Setzen Sie den Inhaltstyp auf application/json
. JavaScript-Beispiel:
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);
}
});
}
Verwendungszweck
getListItemById('https://contoso.sharepoint.com/project/','Tasks',2,function(taskItem){
console.log(taskItem.TaskName);
},
function(error){
console.log(JSON.stringify(error));
}
);
Aktualisieren
Um eine vorhandene Entität zu aktualisieren, müssen Sie die folgenden Aktionen ausführen:
Erstellen Sie eine HTTP-Anforderung mit dem POST
Verb. Fügen Sie einen X-HTTP-Method
Header mit dem Wert MERGE
. Verwenden Sie die Service-URL des Listenelements, das Sie aktualisieren möchten, als Ziel für den POST. Fügen Sie einen If-Match
Header mit einem Wert des ursprünglichen ETag der Entität (*) hinzu. JavaScript-Beispiel:
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);
});
}
Verwendungszweck
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));
}
);
Löschen
Um eine Entität zu löschen, müssen Sie die folgenden Aktionen ausführen:
Erstellen Sie eine HTTP-Anforderung mit dem POST
Verb. Fügen Sie einen X-HTTP-Method
Header mit dem Wert DELETE
. Verwenden Sie die Service-URL des Listenelements, das Sie aktualisieren möchten, als Ziel für den POST. Fügen Sie einen If-Match
Header mit einem Wert des ursprünglichen ETag der Entität hinzu. JavaScript-Beispiel:
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);
});
}
Verwendungszweck
deleteListItem('https://contoso.sharepoint.com/project/','Tasks',3,function(){
console.log('Task has been deleted');
},
function(error){
console.log(JSON.stringify(error));
}
);