2016-06-07 5 views
0

Ich habe festgestellt, dass SharePoint eine Beschränkung von 100 Elementen bei der Verwendung von REST-Aufrufe an eine Liste hat. Ich versuche, es zur Arbeit zu bringen, so dass es Batch-Aufrufe (d. H. Wenn der erste Anruf 133 Elemente ist, zwei Anrufe machen, so dass der erste die ersten 100 und der zweite die letzten 33 erhält).Erhalten Sie mehr als 100 Listenelemente mit Versprechen von SharePoint (Add-In) Cross-Domäne

Dies ist mein (bearbeitet) Code:

this.getListItem = function ($scope, listName, url, SPHostUrl, SPAppWebUrl) { 
    return getListItem(listName, url, SPHostUrl, SPAppWebUrl).done(function(data) { 
     return data; 
    }); 
}; 

Und meine Funktion für die Daten aus Sharepoint abruft.

function getListItem(listName, url, SPHostUrl, SPAppWebUrl) { 

var deferred = $.Deferred(); 
var resultsArray = []; 
var scriptbase = SPHostUrl + "/_layouts/15/"; 

jQuery.getScript(scriptbase + "SP.RequestExecutor.js", getOrderDetails); 

    function getOrderDetails() { 
    var executor = new SP.RequestExecutor(SPAppWebUrl); 
    executor.executeAsync(
     { 
      url: url, 
      method: "GET", 
      dataType: "json", 
      headers: { 
       Accept: "application/json;odata=verbose" 
      }, 
      success: function (data) { 
       var response = JSON.parse(data.body); 
       resultsArray.push(response.d.results); 

       if (response.d.__next) { 
        url = response.d.__next; 
        getOrderDetails(); <- Runs multiple times if __next is true 
       } 

       deferred.resolve(resultsArray) 
      }, 
      error: function (data, errorCode, errorMessage) { 
       alert(errorMessage); 
      } 
     } 
    ); 
    } 
return deferred.promise(); 

} 

Das funktioniert (es wird alle Listenelemente in zwei Anrufe, gibt erste 100 und die zweite die letzten 33), aber nicht zurück, die Daten als ich erwartet hatte. Benutze ich das Versprechen falsch? Oder ist .done auf dem Service-Anruf es ruinieren?

EDIT: Der Code war in Ordnung. Die eine Sache war, dass ich die resultsArray.push() nicht korrekt behandelt habe. Benötigt, um Schleife anstelle der Ergebnisse Array davon direkt drücken (zurück nur zwei Indizes, wegen der zwei Anrufe Jetzt gibt es 133.):

$.each(response.d.results, function (index, item) { 
    resultsArray.push(item); 
}); 

Antwort

0

Der Code funktionierte gut. Die eine Sache war, dass ich die resultsArray.push() nicht korrekt behandelt habe. Benötigt, um Schleife anstelle der Ergebnisse Array davon direkt drücken (zurück nur zwei Indizes, wegen der zwei Anrufe Jetzt gibt es 133.):

$.each(response.d.results, function (index, item) { 
    resultsArray.push(item); 
}); 
0

Ihr Code für mich ok aussieht. Ich kann nur sagen, ich benutze mich immer

functionCall(param) 
      .then(
      function() { 
       console.log('success'); 
      }, 
      function (sender, args) { 
       console.log('fail'); 
      }); 

Vielleicht ist das einen Versuch wert?

Dies könnte auch ein interessantes Thema sein: jQuery deferreds and promises - .then() vs .done()

+0

Vielen Dank für den Hinweis. Siehe meine Bearbeitung für die Lösung. – Robin

Verwandte Themen