![](/img/trans.png)
[英]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.