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 を使用すると、コードで試していたように、つまり index を使用して結果をループできます。

于 2013-09-20T06:41:13.627 に答える
5

上記の Nitish の回答は完全に正しいですが、もう 1 つ考慮する必要があります。

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

すべてのレコードが繰り返されるまで、コールバック関数を使用してすべての結果を 1 つずつ取得できます。

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 に答える
0

以下は、NetSuite/NetScript で 1k を超える結果を取得する方法のサンプルです。

"customsearch_tel_tg_by_trunk_type" という検索はあまり関係ありません。

NetSuite/NetScript での 1,000 以上の結果フェッチの完全なサンプル

于 2014-01-23T10:03:03.577 に答える