簡體   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