我正在尝试编写一个允许我将标识符数组传递给Netsuite中特定字段并返回结果的suitecript搜索。我已经尝试了'ANYOF',' ALLOF'和" WITHIN'但我一直在犯错误
到目前为止,这是我的代码:
List<String> list = Arrays.asList("1","2","3","4","5");
// Both functions are equivalent, I write both to clarify the concept using lambda expression.
//Function<? super String, ? extends Integer> function = stringElement -> Integer.parseInt(stringElement);
Function<? super String, ? extends Integer> function = Integer::parseInt;
list.stream().map(function);
有没有人知道创建一个多项搜索itemid的正确顺序?另外,对于奖金,有没有办法让结果集返回我需要的列只是想法?我需要createColumn吗?
答案 0 :(得分:2)
在文本字段上过滤搜索时,您无法使用ANYOF
,ALLOF
等。您需要使用OR创建过滤器表达式以搜索多个值。
我会这样做:
if(params.type=='sku'){
var filter_name = 'itemid';
}else{
var filter_name = 'upccode';
}
var filters = [
[filter_name, 'is', 'HERHR5201'], 'OR',
[filter_name, 'is', 'HERHR5202'], 'OR',
[filter_name, 'is', 'HERHR5203']
];
var s = search.create({
'type': record.Type.INVENTORY_ITEM,
'filters':filters
}).run();
至于从搜索中返回特定列,您需要使用search.createColumn(),正如您所指出的那样。所以它就像:
//Previous code...
var s = search.create({
'type': record.Type.INVENTORY_ITEM,
'filters':filters,
'columns': [search.createColumn({name: 'internalid'}),
search.createColumn({name: 'upccode'}),
search.createColumn({name: 'itemid'})
/*Other columns as needed*/]
}).run();
答案 1 :(得分:1)
提供的答案是正确的,但是根据您提供的示例代码,我假设搜索需要在某种程度上动态创建。这意味着你提到的'标识符数组'并不总是相同,也不会总是相同的长度。为了根据传入的“标识符数组”创建完全动态的搜索,您需要非常有创意。在下面的解决方案中,我假设函数参数'params'是一个具有'type'属性的对象,以及一个arrIn(字符串数组)属性。下面的搜索使用公式函数'DECODE',可以找到here的描述。
function execute(params) {
var filter_name;
var itemSearchObj;
var stringArr = '';
var arrIn = params.arrIn;
var i;
var count;
// create search filter type
filter_name = params.type === 'sku' ? 'itemid' : 'upccode';
// create stringArr using incoming arrIn
for (i = 0; arrIn && arrIn.length > i; i += 1) {
stringArr += i > 0 ? ", '" + arrIn[i] + "', 'true'" : "'" + arrIn[i] + "', 'true'";
}
if (arrIn.length > 0) {
itemSearchObj = nsSearch.create({
type: 'item',
filters: [
["formulatext: DECODE({" + filter_name + "}," + stringArr + ")", "is", 'true']
],
columns: [
'itemid', // dont need to get fancy here, just put the internal id of whichever fields you want in the columns
'description'
]
});
count = itemSearchObj.runPaged().count;
itemSearchObj.run().each(function (result) {
// Do things for each result
});
}
}