如何在Net-suite上获取所有项目列表?

问题描述 投票:0回答:3

我刚刚开始使用net-suit并试图使用rest-let拉出所有带有细节的项目。通过一些研究,我能够提取所有项目,但我现在的方式并不简单。我首先使用nlapiSearchRecord提取项目的所有ID并循环遍历每个id以使用nlapiLoadRecord获取每个项目的详细信息并添加到数组中。这样,它花费了很多时间。有没有其他方法可以提取所有项目的详细信息?以下是我的代码。

function getAllIDs() {
    return nlapiSearchRecord('item', null, null, null);
 }

function getRecord() {
    var all_IDs = getAllIDs();
    var len=all_IDs.length;
    var result =new Array();

  for(var i=0;i<all_IDs.length;i++) {
    if(all_IDs[i].getRecordType()==="inventoryitem")
        result[i]=nlapiLoadRecord(all_IDs[i].getRecordType(),all_IDs[i].id)
    }
    return result;
}
javascript netsuite
3个回答
3
投票

您可以使用@Krypton建议的内容,但最多可获得1000个结果。

如果您需要超过1000(使用Suitescript 2.0),请尝试以下操作:

    var columns = [];
    var filters = [['isinactive', 'is', 'F']];
    columns.push(search.createColumn({ name: "itemid"}));
    columns.push(search.createColumn({ name: "displayname"}));
    columns.push(search.createColumn({ name: "salesdescription"}));
    columns.push(search.createColumn({ name: "baseprice"}));
    var inventoryitemSearch = search.create({
        type: search.Type.INVENTORY_ITEM, //Change the type as per your requirement
        filters: filters,
        columns: columns
    });
    var arrResults = [];
    var count = 1000;
    var startIndex = 0;
    var endIndex = 1000;
    var resultSet= inventoryitemSearch.run();
    while (count == 1000) {
        var results = resultSet.getRange(startIndex, endIndex);
        arrResults = arrResults.concat(results);
        startIndex = endIndex;
        endIndex += 1000;
        count = results.length;
    }
    log.debug({title: 'arrResults ', details: arrResults });

1
投票

您可以在搜索中包含所需的详细信息。因此,例如,您可以包含nlobjSearchFilter,以便搜索仅返回库存项目,并为要在详细信息中查看的每个字段添加nlobjSearchColumn。这样,您想要查看的所有详细信息都会随搜索一起返回,您可以循环搜索结果,无需单独加载每条记录即可完成所需的操作 - 这将是大多数性能影响发生的地方。

一个例子:

var inventoryitemSearch = nlapiSearchRecord("inventoryitem",null,
[                                  
   ["type","anyof","InvtPart"]
], 
[
   new nlobjSearchColumn("itemid",null,null).setSort(false), 
   new nlobjSearchColumn("displayname",null,null), 
   new nlobjSearchColumn("salesdescription",null,null), 
   new nlobjSearchColumn("baseprice",null,null)
]
);

然后,您可以遍历结果以获取详细信息:

var name, displayName, description, price;
for ( var i = 0; inventoryitemSearch != null && i < searchresults.length; i++ ) {
    var searchresult = inventoryitemSearch[ i ];
    name = searchresult.getValue( 'itemid' ); 
    displayName = searchresult.getValue( 'displayname' ); 
    description = searchresult.getValue( 'salesdescription' ); 
    price = searchresult.getValue( 'baseprice' ); 
}

在NetSuite中有很多关于脚本搜索的知识,所以我建议启动here(需要NetSuite登录)并按照链接继续阅读/试验,直到你的眼睛茫然。


1
投票

我只想使用一个接受搜索对象的通用函数...

const getAllResults = searchObj => {
try {
  const Resultset = searchObj.run()
  const maxResults = searchObj.runPaged().count
  let ResultSubSet = null
  let index = 0
  const maxSearchReturn = 1000
  let AllSearchResults = []

  do {
    let start = index
    let end = index + maxSearchReturn
    if (maxResults && maxResults <= end) {
      end = maxResults
    }
    ResultSubSet = Resultset.getRange(start, end)

    if (ResultSubSet.length === 0) {
      break
    }
    // we could intriduce a record processor to lighetn up the load
    AllSearchResults = AllSearchResults.concat(ResultSubSet)
    index = index + ResultSubSet.length

    if (maxResults && maxResults == index) {
      break
    }
  } while (ResultSubSet.length >= maxSearchReturn)

  return AllSearchResults

  } catch (e) {
    log.error(`getAllResults()`, `error : ${e}`)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.