Sök…


Anmärkningar

REST Service Endpoint URLs

REST-klientåtkomst-API: et introducerades först i SharePoint 2010, men utökades kraftigt i SharePoint 2013. REST-API: et i SharePoint 2010 nås via ListData-webbtjänsten på /_vti_bin/ListData.svc url. SharePoint 2013 introducerade /_api/lists/ och /_api/web endpoint, som uppträder något annorlunda.

Ovanstående slutpunkts-URL: er bör föregås av http://server/site där server representerar server namn, och site representerar namnet på eller sökvägen till den specifika webbplatsen.

Exempel URL för ... SharePoint 2010 SharePoint 2013
Hämtar en lista: /_vti_bin/ListData.svc/ListName /_api/lists('ListGuid')
Hämtar en artikel: /_vti_bin/ListData.svc/ListName(1) /_api/lists('ListGuid')/items(1)
Hämtar en webb: (ingen motsvarighet) /_api/web

Trots skillnaderna i åtkomst till listor och listobjekt är arbetet med dessa resultat mycket likt i båda versionerna.

Observera att tjänsten ListData.svc fortfarande är tillgänglig i SharePoint 2013 för bakåtkompatibilitet.

Skicka REST-begäranden

En REST-begäran kan skickas via en inbyggd JavaScript XMLHttpRequest eller via jQuery AJAX-omslagskonstruktion.

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

Mer information om hur du skickar förfrågningar via AJAX finns i JavaScript AJAX-dokumentationen .

Arbeta med listor

Hämta listobjekt

Det här exemplet visar hur du hämtar alla listobjekt och itererar igenom dem. Du kan använda den top parametern för att begära ett visst antal resultat. Du kan också använda select att välja vissa fält ( $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);
        }
    });
    }

Få en individuell listobjekt

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

Hämta listobjekt med sökningskolumner

Ibland kan du ha en liststruktur som ser ut så här:

Djurlistning

namn Typ Beskrivning
Titel Sträng (text) Djurets namn
Ålder siffra Hur gammalt djuret är
Värde Valuta Djurets värde
Typ Uppslag (tabell över djurstyper) Sökfält (ger en nedrullning av val från tabellen över djurstyper)

Djurstyper

namn Typ Beskrivning
Titel Sträng (text) Arten / djurens namn (ex. Gris)
NumLegs siffra Antal ben på djuret

Förmodligen inte det allvarligaste exemplet men problemet här är fortfarande giltigt. När du använder den vanliga begäran för att hämta värden från SharePoint-listan, för Type , får du bara tillbaka ett fält som heter TypeId i JSON-svaret. För att utöka dessa objekt i bara ett enda AJAX-samtal krävs en extra extra markering i URL-parametrarna.

Detta exempel gäller för mer än bara uppslagskolumner. När du använder kolumner med People/Groups är de i princip bara uppslag, så att du enkelt kan dra objekt som Title , e- EMail och andra.

Exempelkod

Viktig anmärkning : När du definierar fälten som du vill komma tillbaka från kolumnerna i sökningen måste du prefixera namnet på fältet med namnet på sökfältet i den ursprungliga tabellen. Om du till exempel vill få tillbaka attributet NumLegs från uppslagskolumnen måste du skriva 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();

Lägga till val i ett flerfunktionsuppslagfält

I det här exemplet antas att din MultiLookupColumnName heter MultiLookupColumnName och att du vill ställa in ditt fleruppslagningsfält för att leta upp till objekt med ID 1 och 2.

Använda 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
});

Använda 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);

Objekt med sökningslistor returnerade från en fråga

För att simulera sökning med REST kan du göra följande:

  1. Använd parametern $skip=n att hoppa över de första n posterna enligt parametern $orderby

  2. Använd parametern $top=n att returnera de översta n posterna enligt $orderby och $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();
            }
        }
    );
}

Hämta ett ID för nyskapat objekt i SharePoint-listan

Detta exempel visar hur man hämtar ett ID för ett nyskapat objekt med SharePoint REST API.

Notera :

listnamn - Denna variabel innehåller namnet på din lista.

newItemBody - Detta kommer att vara din förfrågningsorgan för att lägga till ett nytt objekt i listan.

t.ex. var newItemBody = {__metadata: {'type': 'SP.Data.MyListNameItem'}, Titel: 'Viss titelvärde'};

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

Hur man utför CRUD-operationer med hjälp av SharePoint 2010 REST Interface

Skapa

För att utföra en Skapa operation via REST måste du utföra följande åtgärder:

Skapa en HTTP-begäran med POST verbet. Använd tjänsten URL för listan som du vill lägga till en enhet som mål för POST. Ställ in innehållstypen till application/json . Serialisera JSON-objekt som representerar dina nya listobjekt som en sträng och lägg till detta värde i JavaScript-exemplet med begäran.

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

Användande

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

Läsa

För att kunna utföra en läsoperation via REST måste du utföra följande åtgärder:

Skapa en HTTP-begäran med GET verbet. Använd servicewebbadressen för listobjektet som du vill lägga till en enhet som mål för GET. Ställ in innehållstypen till application/json . JavaScript-exempel:

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

Användande

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

Uppdatering

För att uppdatera en befintlig enhet måste du utföra följande åtgärder:

Skapa en HTTP-begäran med POST verbet. Lägg till en X-HTTP-Method metodrubrik med ett värde på MERGE . Använd tjänsten URL för listobjektet som du vill uppdatera som mål för POST Lägg till en If-Match rubrik med ett värde för enhetens ursprungliga ETag, eller *. JavaScript-exempel:

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

}

Användande

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

Radera

För att radera en enhet måste du utföra följande åtgärder:

Skapa en HTTP-begäran med POST verbet. Lägg till en X-HTTP-Method metodrubrik med ett värde DELETE . Använd servicewebbadressen för listobjektet som du vill uppdatera som mål för POST Lägg till en If-Match rubrik med ett värde på enhetens ursprungliga ETag. JavaScript-exempel:

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

Användande

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow