使用RESTlet在Netsuite中按页面获取记录

时间:2015-10-27 13:24:31

标签: restlet netsuite

我希望获得特定记录类型的所有记录,但我只获得了1000。 这是我使用的代码。

function getRecords() {
    return nlapiSearchRecord('contact', null, null, null);
}

我需要两个代码。

1)一次获取整个记录

2)通过将pageindex作为参数传递给getRecords [1st => 0-1000,2nd => 1000 - 2000,...........]来获取记录页面。 p>

function getRecords(pageIndex) {
    .........
}

提前致谢

2 个答案:

答案 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;
}