我正在我的客户中心环境中添加一个自定义列表 portlet,它使用一个自定义字段,该字段包含一个值,该值表示客户已购买的所有项目的内部 ID。该值将用作保存的搜索中的过滤器,其数据将填充列表 portlet。
该字段的文本看起来像“123”、“456”等。
我可以通过我的调试器成功检索字段文本,但是当我将字段的值作为变量传递给我的过滤器时,它会产生一条错误消息:
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"
})
]
});
当我尝试替换时:
["custrecord_vcc_doc_item","anyof","2291","3546","2279","1976"]
为了替换固定 ID,我使用了以下代码:
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 的客户中心运行的,所以我无法访问客户记录,因为客户中心 Angular 色没有访问客户列表的权限。出于同样的原因,我也无法使用 {item.internalid} 通过保存的搜索直接访问项目内部 ID:许可。
变通方法是设置一个静态字段的动态字段,我正在通过交易搜索对其进行搜索,静态字段文本应该是过滤器的文本。
理想情况下,变量 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"]]
关于javascript - 我需要交易字段的文本作为通过 portlet 构建的 NetSuite 保存搜索中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675492/