2016-02-18 5 views
2

Netsuite возвращает только 1000 записей за раз, и когда я пытаюсь получить более 1000 записей, он переходит в тайм-аут. для решения этой проблемы мы можем использовать механизм поискового вызова. Есть ли у кого-нибудь опыт работы с пейджингом в NetSuite? Заранее спасибо.Как реализовать пейджинг в Netsuite?

ответ

4

Вы можете использовать ниже код, чтобы принести бесконечные результаты (SuiteScript 1,0):

var search = nlapiLoadSearch(null, SAVED_SEARCH_ID).runSearch(); 
var res = [], 
    PAGE_SIZE = 1000, //MAX 1000, you can lower it than 1000 if search times out 
    currentRes; 

var i = 0; 

while(i % PAGE_SIZE === 0){ 
    currentRes = (search.getResults(i, i+PAGE_SIZE) || []); 
    res = res.concat(currentRes); 
    i = i + currentRes.length; 
} 

Это говорит, search.getResults(page*PAGE_SIZE, (page*PAGE_SIZE + PAGE_SIZE)) должен дать вам результаты n-й страницы. Остерегайтесь, что getResults() имеет связанные с ним точки управления API.

Начиная 2016.1 SuiteScript 2.0 имеет дополнительные интерфейсы API для результатов поиска пейджинга, ниже фрагмент кода:

/** 
*@NApiVersion 2.x 
*/ 
require(['N/search'], 
    function(search) { 
     function loadAndRunSearch() { 
      var mySearch = search.load({ 
       id: 'customsearch_my_so_search' 
      }); 
      var myPagedData = mySearch.runPaged(); 
      myPagedData.pageRanges.forEach(function(pageRange) { 
       var myPage = myPagedData.fetch(pageRange); 
       myPage.data.forEach(function(result) { 
        var entity = result.getValue('entity'); 
        var subsidiary = result.getValue('subsidiary'); 
       }); 
      }); 
     } 
     loadAndRunSearch(); 
    });