使用 RESTlet 在 Netsuite 中逐页获取记录
Get records by page wise in Netsuite using RESTlet
我想获取特定记录类型的所有记录,但我只有 1000 条。
这是我使用的代码。
function getRecords() {
return nlapiSearchRecord('contact', null, null, null);
}
我需要两个验证码。
1) 一次获取全部记录
2) 通过将 pageindex 作为参数传递给 getRecords [1st =>0-1000 , 2nd =>1000 - 2000 , ......]
function getRecords(pageIndex) {
.........
}
提前致谢
您无法一次获得完整的记录。但是,您可以按 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 作为参数,然后将其用作 return nextPage 的附加过滤器。
您可以编写一个逻辑来获得第 n 个页面结果,但是,您可能不得不 运行 无用地搜索 n-1 次。
此外,我建议使用 nlapiCreateSearch().runSearch()
,因为它可以 return 最多 4000 条记录
这是另一种在搜索中获得超过 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;
}
我想获取特定记录类型的所有记录,但我只有 1000 条。 这是我使用的代码。
function getRecords() {
return nlapiSearchRecord('contact', null, null, null);
}
我需要两个验证码。
1) 一次获取全部记录
2) 通过将 pageindex 作为参数传递给 getRecords [1st =>0-1000 , 2nd =>1000 - 2000 , ......]
function getRecords(pageIndex) {
.........
}
提前致谢
您无法一次获得完整的记录。但是,您可以按 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 作为参数,然后将其用作 return nextPage 的附加过滤器。
您可以编写一个逻辑来获得第 n 个页面结果,但是,您可能不得不 运行 无用地搜索 n-1 次。
此外,我建议使用 nlapiCreateSearch().runSearch()
,因为它可以 return 最多 4000 条记录
这是另一种在搜索中获得超过 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;
}