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

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

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

Auslagerungslistenelemente, die von einer Abfrage zurückgegeben wurden

Um das Paging mit REST zu simulieren, haben Sie folgende Möglichkeiten:

  1. Verwenden Sie den Parameter $orderby $skip=n , um die ersten n Einträge gemäß dem Parameter $orderby zu überspringen

  2. Verwenden Sie den Parameter $top=n , um die ersten n 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));
  }
);


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow