2016-06-17 2 views
0

Быстрый вопрос для вас здесь. Поэтому я пытаюсь сделать REST-расчет количества элементов списка, но список возвращает только до 1000 записей за раз. Я думаю, что у меня есть работа, но как я могу добавить два результата?SharePoint 2010 REST Большой список Count

 $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) { 
     $("#ALLCount1").text(data.d.results.length); 
    }) 

    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) { 
     $("#ALLCount2").text(data.d.results.length); 
    }) 

ответ

2

Итого Количество товара

Если вы ищете общее число элементов в самом списке (в отличие от числа элементов в фильтрованной зрения) можно непосредственно получить доступ к списку в $count собственности.

"/_vti_bin/ListData.svc/MPIC/$count" 

Это возвращает количество элементов.

пейджинга (при необходимости)

Для имитации подкачки с помощью REST вы можете сделать следующее:

  1. Используйте параметр $skip=n пропустить первые n записи в соответствии с параметром $orderby
  2. Используйте параметр $top=n, чтобы вернуть верхние n записей в соответствии с $orderby и $skip параметров.

Работа с асинхронным

Самой большой проблемой в вашем коде является то, что у вас есть два асинхронных функция обратного вызова, которые вы используете, чтобы получить сумму результирующих элементов. Поскольку эти вызовы функций не выполняются в рамках одной и той же области, вы не можете получить доступ к их значениям одновременно.

Обходным способом является использование функциональной цепочки для перемещения вашей логики вперед в функции (-ы) обратного вызова.

Пример использования $ пропустить и $ топа

Вот пример использования $skip и $top параметров с вашим условием кода, используя рекурсивную функцию обратного вызова, чтобы получить общее количество результатов перед обновлением текста вашей ALLCount1 элемент.

$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$top=1000&$inlinecount=allpages", function (data) { 
    var count = data.d.results.length; 
    updateTotal(count); 
}); 

function updateTotal(total){ 
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skip="+total+"&$top=1000&$inlinecount=allpages", function (data) { 
     var count = data.d.results.length; 
     if(count > 0){ 
      updateTotal(total+count); 
     } 
     else{ 
      $("#ALLCount1").text(total); 
     } 
    }); 
} 

Пример использования $ skiptoken и $ топ

Если вы вынуждены использовать $skiptoken вместо $skip (например, при запросе списка 5000+ элементов), вы определенно можете все еще использовать его , но у вас будет немного больше работы.

Принимать во внимание, что $skip просто хочет удалить все предметы, $skiptoken хочет, чтобы ID последнего элемента пропустил.

Код будет в основном таким же, как указано выше, но вам нужно будет погрузиться в результаты данных и вырвать значение идентификатора последнего элемента. Я оставлю это как упражнение для читателя.

updateTotal(0,0); 
function updateTotal(skip,total){ 
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skiptoken="+skip+"&$top=1000&$inlinecount=allpages", function (data) { 
     var count = data.d.results.length; 
     if(count > 0){ 
      var lastItemId; 
      // TODO: get last item id from results here 
      updateTotal(lastItemId,total+count); 
     } 
     else{ 
      $("#ALLCount1").text(total); 
     } 
    }); 
} 
0

Чтобы получить сумму, которую вы могли бы попробовать что-то вроде этого:

var sum = 0; 

$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) { 
    sum = data.d.results.length; 
    $("#ALLCount1").text(sum); 
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) { 
     sum += data.d.results.length; 
     $("#ALLCount2").text(sum); 
    }) 
}) 

Хотя есть некоторые проблемы:

  1. Для одного, почему вы пропуская 1016? Вы не хотите 1001?
  2. У вас здесь всего два звонка. Как вы планируете получать запись 2001 года?

Возможно, вы захотите сделать пейджинг. То есть, продолжайте отправлять запросы до тех пор, пока не будут возвращены никакие записи.

+0

Итак, когда я смотрю на первый счет. У него есть следующий, который начинается с 1016. Я думаю, потому что первые 16 документов были удалены так. Как работает пейджинг? Я нашел некоторые комментарии, упоминающие об этом, но ничего конкретного о том, как выполнить. –

+0

Вы по-прежнему хотите ограничить его до 1000, если только вы не знаете, сколько из них удалено все время. Лучше ограничить его до 1000, вернуть его 984 и получить точное количество. – Matt

+0

[этот пример] (http://stackoverflow.com/questions/6951191/do-while-javascript-issue) должен вас начать. В нем есть пример кода, который потребует модификации, но вы можете отправить другой вопрос, если у вас есть проблемы с ним. – Matt

Смежные вопросы