3

我无法获取项目列表。我正在使用保存的搜索并希望从中创建所有项目记录 ID 的列表。但它不起作用。

我的代码

var loadSearch=nlapiLoadSearch('item','customsearch12');
var getData = loadSearch.runSearch();
var itemCol=new Array();
for(var i=0;i<getData.length;i++)
{
    itemCol.push(getData[i].getId());
}

有人可以帮我吗

4

4 回答 4

6

试试这个代码

var loadSearch=nlapiLoadSearch('item','customsearch12');
var getData = loadSearch.runSearch();
var itemCol=new Array();
getData.forEachResult(function (searchRow) {

    itemCol.push(searchRow.getId());
    return true;
});

当您使用 nlapiLoadSearch 时,结果是 nlobjSearchResultSet 而不是像 nlapiSearchRecord 那样的数组。

如果您使用 nlapiSearchRecord,那么您可以像在代码中尝试一样遍历结果,即使用索引

于 2013-09-20T06:41:13.627 回答
5

Nitish 上面给出的答案是完全正确的,但您还需要考虑一件事。

nlapiLoadSearch api 一次返回 4000 条记录。

nlapiSearchRecord api 一次只返回 1000 条记录,那么如果您保存的搜索包含超过 1000 条记录怎么办。

所以你会错过那些额外的项目。

所以这是获得更好结果的代码

  //Searching the items
    var searchResults = nlapiSearchRecord('item', 'customsearch12',null,null);
    var searchedItemId;
    var lastId;
    var completeResults = new Array();
    var arrNewFilters=[];

    if (searchResults != null) {
        completeResults = completeResults.concat(searchResults);
    }

    else {
        completeResults = null;
        nlapiLogExecution('Debug', 'No item found', 
            weight + ' Null result');
    }

    if (completeResults != null) {

        if (searchResults.length == 1000) {

            while (searchResults.length == 1000) {

                //Initialize variable
                lastId = "";
                //Get Record Id of Last record, 
                 //to search the item record again from that record
                lastId = searchResults[999].getId();

                //start after the last id searched
                arrNewFilters.push(new nlobjSearchFilter("internalidnumber", 
                   null, "greaterthan", lastId));

                //Lets search again
                var searchResults = nlapiSearchRecord('item', 'customsearch12',
                           arrNewFilters, null);

                if (searchResults != null) {

                    //Append the search result to the result present before
                    completeResults = completeResults.concat(searchResults);
                }
            }
        }


        for (var result = 0; result < completeResults.length; result++) {
         //Loop through the items      
         }

希望你让我尼蒂什!

于 2013-09-20T08:00:09.617 回答
0

下面是如何在 NetSuite/NetScript 中获取超过 1k 的结果的示例。

搜索“customsearch_tel_tg_by_trunk_type”并不真正相关。

在 NetSuite/NetScript 中获取 1k+ 结果的完整示例

于 2014-01-23T10:03:03.577 回答
0

您可以使用回调函数一一获取所有结果,直到所有记录都被迭代。

var search = nlapiLoadSearch('item','customsearch12');
var resultSet = loadSearch.runSearch();
var itemCol=new Array();
resultSet.forEachResult(function (iterator) {

    itemCol.push(iterator.getId());
    return true;
});

或者您可以使用 nlobjResultSet 的 getResults 加载它的一些记录

    var search = nlapiLoadSearch('item', 'customsearch12');
    var resultSet = search.runSearch();
    var results = resultSet.getResults(0, 100);//get the results from 0 to 100 search results
    var itemCol = new Array();
    for(var i in results)
    {
    itemCol.push(results[i].getValue('id'));
    }
于 2015-05-21T09:35:46.947 回答