繁体   English   中英

如何获取 NetSuite 上的所有项目列表?

[英]How to get all items list on NetSuite?

我刚开始使用 NetSuite,并尝试使用 Restlet 提取所有包含详细信息的项目。 通过一些研究,我能够拉出所有项目,但我现在做的方式并不简单。 我首先使用 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;
}

您可以使用@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 });

您可以在搜索中包含所需的详细信息。 因此,例如,您可以包含一个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 中的脚本搜索,有很多东西需要学习,所以我建议从这里开始(需要 NetSuite 登录)并按照链接继续阅读/试验,直到你的眼睛呆滞为止。

我只是喜欢使用接受搜索对象的通用函数......

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}`)
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM