[英]How do you get a list of all available list values for a field in 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.