SuiteScript搜索:变量转带push功能函数出错求助
问题分析与修复方案
你遇到的核心问题是用search.createFilter创建item.type筛选器时的写法不符合NetSuite的API规范,同时还有几个遗漏和不规范的地方,下面是具体修正方案:
关键错误点
- 关联字段写法错误:
item.type这类关联记录的字段,不能直接把关联名拼在name里,必须通过join参数指定关联的记录类型,再用name写字段名 - 筛选值格式问题:如果要匹配Kit和Package两种商品类型,
values需要传数组['Kit', 'Package'],不是字符串'Kit/Package';若只匹配Kit,传['Kit']即可 - 遗漏原筛选条件:原代码里的
["type","anyof","CustInvc"](指定单据为发票)在新函数里漏掉了,必须补回才能和原搜索逻辑一致 - 未声明变量:
filterParams没有用var/let/const声明,会变成全局变量,容易引发意外冲突
修正后的函数代码
function invoiceSearchObj() { // 初始化筛选器和列数组 var filters = []; var columns = []; // 修正后的筛选参数 const filterParams = [ {join: 'item', name: 'type', operator: search.Operator.ANYOF, values: ['Kit', 'Package']}, {name: 'trandate', operator: search.Operator.WITHIN, values: '01/01/2023'}, {name: 'type', operator: search.Operator.ANYOF, values: 'CustInvc'}, // 补回原发票类型筛选 {join: 'item', name: 'custitemitemoriginal', operator: search.Operator.IS, values: 'T'}, {name: 'status', operator: search.Operator.ANYOF, values: 'CustInvc:B'} ]; // 批量创建筛选器 filterParams.forEach(function(params){ filters.push(search.createFilter(params)); }); // 创建列(这部分逻辑没问题,保留原写法) columns.push(search.createColumn({name: 'tranid', summary: search.Summary.MAX, sort: search.Sort.ASC})); columns.push(search.createColumn({name: 'formulatext', summary: search.Summary.MAX, formula: '{item.memberitem}'})); columns.push(search.createColumn({name: 'internalid', join: 'createdFrom', summary: search.Summary.MAX})); return search.create({type: search.Type.INVOICE, filters: filters, columns: columns}); }
额外提示
如果不确定商品类型的内部值,可以在NetSuite后台自定义>列表/记录/字段>项目类型中查看,或者用NetSuite的搜索调试工具先验证正确的筛选值;另外日期参数01/01/2023如果需要兼容时区,建议用new Date('2023-01-01')替代字符串写法。
内容的提问来源于stack exchange,提问作者happytobe
相关产品推荐
相关产品推荐

