Vernita
07/28/2023, 11:47 PMfunction getInputData() {
var scriptObj = runtime.getCurrentScript();
var filtersParam = runtime
.getCurrentScript()
.getParameter({ name: "custscript_selected_lines_json" });
var lineIdToTransactionIdMap = JSON.parse(filtersParam);
log.debug("lineIdToTransactionIdMap", lineIdToTransactionIdMap);
var searchResults = [];
function createDynamicFilter(keyValuePairs) {
var filters = [];
var index = 0;
for (var internalId in keyValuePairs) {
if (keyValuePairs.hasOwnProperty(internalId)) {
var lineIds = keyValuePairs[internalId];
var internalIdFilter = search.createFilter({
name: "internalid",
operator: search.Operator.ANYOF,
values: [internalId],
});
var lineIdFilters = [];
for (var i = 0; i < lineIds.length; i++) {
var lineIdFilter = search.createFilter({
name: "line",
operator: search.Operator.EQUALTO,
values: [lineIds[i]],
});
lineIdFilters.push(lineIdFilter);
}
log.debug("lineidfilters", lineIdFilters);
if (index > 0) {
filters.push("OR");
}
filters = filters.concat(internalIdFilter, "AND", lineIdFilters);
index++;
}
}
return filters;
}
var keyValuePairs = lineIdToTransactionIdMap;
// Creating the filter
var filters = createDynamicFilter(keyValuePairs);
log.debug("createdynamicfilters", filters);
var isarray = util.isArray(filters);
log.debug("isarray?", isarray);
// Create the search using the filters
var invoiceSearchObj = search.create({
type: "invoice",
filters: [filters],
columns: [
search.createColumn({ name: "internalid", label: "Internal ID" }),
search.createColumn({ name: "trandate", label: "Date" }),
search.createColumn({ name: "entity", label: "Name" }),
search.createColumn({ name: "tranid", label: "Document Number" }),
],
});
return invoiceSearchObj;
}
Returning an error of
type: "error.SuiteScriptError",
name: "WRONG_PARAMETER_TYPE",
message: "Wrong parameter type: filters is expected as Array. ",
id: null,
The debug log shows the isarray=true.
Why am I getting this error?battk
07/29/2023, 12:18 AMbattk
07/29/2023, 12:18 AMbattk
07/29/2023, 12:19 AMVernita
07/29/2023, 12:43 AMVernita
07/29/2023, 12:44 AMbattk
07/29/2023, 1:03 AMbattk
07/29/2023, 1:03 AMbattk
07/29/2023, 1:04 AMraghav
07/29/2023, 6:01 AMVernita
07/29/2023, 6:21 AMraghav
07/29/2023, 7:15 AMFormat:
[
["type","anyof","CustInvc"],
"AND",
[
[
["internalid","anyof","44762"],
"AND",
[
["line","equalto","3"],
"OR",
["line","equalto","4"]
]
], //temp
"OR",
[
["internalid","anyof","44760"],
"AND",
[
["line","equalto","3"],
"OR",
["line","equalto","4"]
] // subTemp
] // temp
] //subFilter
] //filter
And the below code will give you the desired result
Use keyword data to store your JSON or update the code accordingly.
filter = []
filter.push(["type","anyof","CustInvc"])
filter.push("AND")
subFilter=[]
flag=false
Object.keys(data).map(function(each) {
if(flag){
subFilter.push("OR")
}
flag=true
temp=[]
temp.push(["internalid","anyof",each])
temp.push("AND")
subTemp =[]
for(i=0;i<data[each].length;i++) {
subTemp.push(["line","equalto",data[each][i]])
if(i!=data[each].length-1) {
subTemp.push("OR")
}
}
temp.push(subTemp)
subFilter.push(temp)
})
console.log(JSON.stringify(filter))
Vernita
07/29/2023, 7:25 AMVernita
07/30/2023, 11:32 AM