2017-01-24 14 views
0

Happy Tuesday!SharePoint 2010 REST:getJSON&5,000以上のレコードを持つリストに追加

私は問題を抱えています。私はうまく動作しないようです。私は5,000以上の項目を持つRESTを使用してリストを照会しようとしています。私は最良の方法は、最初の0 <> 5000、もう1つは> 5000をループし、次に結果を追加すると考えましたが、動作させることができません。誰もがこれを経験している?

function fnResidences(choice) { 
     $.getJSON("../_vti_bin/ListData.svc/Residences?$expand=Country&$select=Country/Country,*$filter=(Id gt 0 and Id lt 5000) and (Country/Country eq '" + choice + "')", function (data) { 
      if (data.d.results == 0) { 

       $("#Residences-Table").html("N/A"); 

       } else { 
       $("#Residences-Table").empty(); 

        $.each(data.d.results, function (data) { 

        $("#Residences-Table").append("<tr><td>"+this.ResidenceName+"</td></tr>"); 

         $.getJSON("../_vti_bin/ListData.svc/Residences?$expand=Country&$select=Country/Country,*$filter=(Id gt 5000) and (Country/Country eq '" + choice + "')", function (data) { 

          if (data.d.results == 0) { 

           $("#Residences-Table").html("N/A"); 

           } else { 

            $("#Residences-Table").empty(); 

            $.each(data.d.results, function (data) { 

             $("#Residences-Table").append("<tr><td>"+this.ResidenceName+"</td></tr>"); 

            }); 
           } 
         }) 
       }); 
      } 
     }) 
    } 
+0

(Id gt 0とId lt 5000に追加) –

答えて

0

ページングの使用を検討してください。それは、検索するアイテムの数とスキップするアイテムの数をそれぞれ指定するために、$top$skipのパラメータを使用するようになっています。

$orderbyパラメータで使用する列のインデックスが作成されていることを確認するだけで済みます。 (または、デフォルトでインデックスされているIDフィールドを使用することもできます)

私は、REST APIを使用して> 5000個のアイテムを含むリストからの結果を正常にページするために再帰を使用しました。以下の例の再帰的なgetNextBatch()関数は、呼び出されるたびに1000個までのアイテムを取得します。上記のコード例では見えないが、結果のバッチを処理し、その結果を完全にそれぞれロードされると、任意の最終的なタスクを実行するために使用される方法processData()onComplete()、ある

var endpointUrl = "/_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(); 
      } 
     } 
    ); 
} 

注意。

関連する問題