Javascript 我需要事务字段的文本作为通过portlet构建的NetSuite保存的搜索中的变量
我正在我的客户中心环境中添加一个自定义列表portlet,它使用一个自定义字段,该字段包含一个值,该值表示客户购买的所有项目的内部ID。此值将用作已保存搜索中的过滤器,该搜索的数据将填充列表portlet 字段的文本看起来像“123”、“456”等 我可以通过我的调试器成功检索字段文本,但当我将字段值作为变量传递给过滤器时,它会生成一条错误消息:Javascript 我需要事务字段的文本作为通过portlet构建的NetSuite保存的搜索中的变量,javascript,arrays,variables,netsuite,suitescript2.0,Javascript,Arrays,Variables,Netsuite,Suitescript2.0,我正在我的客户中心环境中添加一个自定义列表portlet,它使用一个自定义字段,该字段包含一个值,该值表示客户购买的所有项目的内部ID。此值将用作已保存搜索中的过滤器,该搜索的数据将填充列表portlet 字段的文本看起来像“123”、“456”等 我可以通过我的调试器成功检索字段文本,但当我将字段值作为变量传递给过滤器时,它会生成一条错误消息: Filter expecting numeric value was removed, as non-numeric value ... was pr
Filter expecting numeric value was removed, as non-numeric value ... was provided.
使用NetSuite搜索导出以非动态方式重新创建我正在查找的内容,将生成以下代码:
var customrecord_vcc_documentsSearchObj = search.create({
type: "customrecord_vcc_documents",
filters:
[
[["custrecord_vcc_customer_docs","anyof","@CURRENT@"],"AND",["custrecord_vcc_doc_type","noneof","1"]],
"OR",
["custrecord_vcc_doc_type","anyof","5"],
"OR",
[["custrecord_vcc_doc_type","anyof","2","3","4","6","7"],"AND",["custrecord_vcc_doc_item","anyof","2291","3546","2279","1976"]]
],
columns:
[
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({name: "custrecord_vcc_doc_type", label: "Type"}),
search.createColumn({
name: "formulatext",
formula: "'<a href='||{custrecord_vcc_link_to_file}||'>Open</a>'",
label: "Link"
})
]
});
var transactionSearchObj = search.create({
type: "transaction",
filters:
[
["name","anyof","@CURRENT@"]
],
columns:
[
search.createColumn({
name: "custbody_vcc_item_array_fixed",
summary: "MAX",
label: "Item Array Fixed"
})
]
});
var itemarray=[];
transactionSearchObj.run().each(function(result){
var itemarray1 = result.getValue({
name: "custbody_vcc_item_array_fixed",
summary: search.Summary.MAX
});
itemarray.push(itemarray1);
log.debug({
title: "Items",
details: itemarray1
});
//return true;
});
var itemarraytext = itemarray.toString();
log.debug({
title: "Item Array String",
details: itemarraytext
});
log.debug({
title: "Item Array ",
details: itemarray
});
为了更换固定ID,我使用了以下代码:
var customrecord_vcc_documentsSearchObj = search.create({
type: "customrecord_vcc_documents",
filters:
[
[["custrecord_vcc_customer_docs","anyof","@CURRENT@"],"AND",["custrecord_vcc_doc_type","noneof","1"]],
"OR",
["custrecord_vcc_doc_type","anyof","5"],
"OR",
[["custrecord_vcc_doc_type","anyof","2","3","4","6","7"],"AND",["custrecord_vcc_doc_item","anyof","2291","3546","2279","1976"]]
],
columns:
[
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({name: "custrecord_vcc_doc_type", label: "Type"}),
search.createColumn({
name: "formulatext",
formula: "'<a href='||{custrecord_vcc_link_to_file}||'>Open</a>'",
label: "Link"
})
]
});
var transactionSearchObj = search.create({
type: "transaction",
filters:
[
["name","anyof","@CURRENT@"]
],
columns:
[
search.createColumn({
name: "custbody_vcc_item_array_fixed",
summary: "MAX",
label: "Item Array Fixed"
})
]
});
var itemarray=[];
transactionSearchObj.run().each(function(result){
var itemarray1 = result.getValue({
name: "custbody_vcc_item_array_fixed",
summary: search.Summary.MAX
});
itemarray.push(itemarray1);
log.debug({
title: "Items",
details: itemarray1
});
//return true;
});
var itemarraytext = itemarray.toString();
log.debug({
title: "Item Array String",
details: itemarraytext
});
log.debug({
title: "Item Array ",
details: itemarray
});
并在固定ID的位置输入itemarraytext。每个我的调试器的itemarraytext值为:
"2191","2046","1209","1209","1988","2092","295","1214","1988",...
但错误消息仍然存在,并且未应用筛选器
这是在NetSuite的客户中心运行的,因此我无法访问客户记录,因为客户中心角色无权访问客户列表。我也无法通过使用{item.internalid}保存的搜索直接访问项目内部ID,原因与re:permission相同
变通方法是一个动态字段,它设置了一个静态字段,我正在通过事务搜索对其进行搜索,静态字段文本应该是过滤器的文本
理想情况下,变量itemarraytext将根据每个客户的购买历史记录传递并过滤我正在搜索的可用文档。如果我理解正确,您正在构建逗号分隔的项目字符串数组:
[
'"2191","2046","1209"',
'"1209","1988","2092"',
'"295","1214","1988"'
]
然后调用toString方法来创建:
'"2191","2046","1209","1209","1988","2092","295","1214","1988"'
并将该字符串传递给搜索筛选器:
["custrecord_vcc_doc_item","anyof",'"2191","2046","1209","1209","1988","2092","295","1214","1988"']
并且过滤器不将“2191”、“2046”、“1209”、“1209”、“1988”、“2092”、“295”、“1214”、“1988”识别为数字
相反,您需要替换双引号并在逗号处拆分itemarraytext变量:
["custrecord_vcc_doc_item","anyof",itemarraytext.replace(/"/g,'').split(',')];
这应等同于:
["custrecord_vcc_doc_item","anyof",["2191","2046","1209","1209","1988","2092","295","1214","1988"]]
循环返回以发布我最终使用的不同解决方案 通过将脚本部署“运行方式”角色字段从当前角色更改为“管理员”,我能够解决许可错误。这使我能够从搜索中简单地访问条目ID,并将它们作为数组传递给另一个过滤器 最后的代码是:
var transactionSearchObj = search.create({
type: "transaction",
filters:
[
["name","anyof","@CURRENT@"],
"AND",
["item.type","anyof","InvtPart"]
],
columns:
[
search.createColumn({
name: "item",
sort: search.Sort.ASC,
summary: "GROUP",
label: "Item"
})
]
});
transactionSearchObj.run().each(function(result){
var itemarray1 = result.getValue({
summary: "GROUP",
name: "item"
})
itemarray.push(itemarray1);
log.debug({
title: "Items",
details: itemarray1
});
return true;
});
log.debug({
title: "Item Array",
details: itemarray
});
var customrecord_vcc_documentsSearchObj = search.create({
type: "customrecord_vcc_documents",
filters:
[
[["custrecord_vcc_customer_docs","anyof","@CURRENT@"],"AND",["custrecord_vcc_doc_type","noneof","1"]],
"OR",
["custrecord_vcc_doc_type","anyof","5"],
"OR",
[["custrecord_vcc_doc_type","anyof","2","3","4","6","7"],"AND",["custrecord_vcc_doc_item","anyof",itemarray]]
],
我无法获取项目ID数组,因为客户中心角色无法访问项目记录。结果是一个许可错误。我提出的解决方法是将ID存储在一个字段中,尝试重新创建NetSuite搜索导出扩展输出的文本输入,然后将其推送到数组中,并通过.toString()方法尝试重新创建文本输入。当我仅使用数组变量itemarray运行脚本时,我得到了相同的错误:错误搜索筛选器已删除预期数值的筛选器已删除,与非数值“2191”、“2046”相同“,…非常感谢,它像一个符咒。它仍然会产生一些错误,但最终的结果正是我想要做的!这最终在以后的测试中不起作用,但我最终找到了一个更简单的解决方案,就在眼前。我无法通过搜索将项目ID作为常规数组访问的原因是权限问题,因此我将脚本部署更改为作为管理员角色而不是“当前角色”运行。这允许我访问所需的项目ID,并将其作为数组传递。