我希望获得特定记录类型的所有记录,但我只获得了1000。 这是我使用的代码。
function getRecords() {
return nlapiSearchRecord('contact', null, null, null);
}
我需要两个代码。
1)一次获取整个记录
2)通过将pageindex作为参数传递给getRecords [1st => 0-1000,2nd => 1000 - 2000,...........]来获取记录页面。 p>
function getRecords(pageIndex) {
.........
}
提前致谢
答案 0 :(得分:4)
您无法一次获得完整记录。但是,您可以按internalid对结果进行排序,并记住第一个搜索结果的最后一个internalId,并在下一个搜索结果中使用其他过滤器。
var totalResults = [];
var res = nlapiSearchRecord('contact', null, null, new nlobjSearchColumn('internalid').setSort()) || [];
lastId = res[res.length - 1].getId();
copyAndPushToArray(totalResult, res);
while(res.length < 1000)
{
res = nlapiSearchRecord('contact', null, ['internalidnumber', 'greaterthan', lastId], new nlobjSearchColumn('internalid').setSort());
copyAndPushToArray(totalResult, res);
lastId = res[res.length - 1].getId();
}
请注意,如果记录数量很高,您可能会在时间和使用点方面过度使用治理限制。
如果你还记得lastId,你可以在RESTlet中编写一个逻辑,将id作为param,然后使用它作为附加过滤器来返回nextPage。
您可以编写逻辑来获取第n个页面结果,但是,您可能必须无用地运行搜索n-1次。
另外,我建议使用nlapiCreateSearch().runSearch()
,因为它最多可以返回4000条记录
答案 1 :(得分:2)
以下是另一种在搜索中获得超过1000个结果的方法:
function getItems() {
var columns = ['internalid', 'itemid', 'salesdescription', 'baseprice', 'lastpurchaseprice', 'upccode', 'quantityonhand', 'vendorcode'];
var searchcolumns = [];
for(var col in columns) {
searchcolumns.push(new nlobjSearchColumn(columns[col]));
}
var search = nlapiCreateSearch('item', null, searchcolumns);
var results = search.runSearch();
var items = [], slice = [], i = 0;
do {
slice = results.getResults(i, i + 1000);
for (var itm in slice) {
var item = {};
for(var col in columns) { item[columns[col]] = slice[itm].getValue(columns[col]); } // convert nlobjSearchResult into simple js object
items.push(item);
i++;
}
} while (slice.length >= 1000);
return items;
}