使用 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;
}