Netsuite脚本搜索BOM时nlobjSearchFilter报无效条件如何解决
问题根因
- 你定义搜索过滤时添加了
assemblyitem这个无效关联(join),BOM记录类型本身不存在该关联路径,所以触发过滤条件无效的报错,和你用id还是internalid作为过滤字段无关 - 搜索结果返回的数组下标从0开始,你直接取
searchResults[1]会在匹配结果少于2条时抛出空指针异常
修正后代码
var filters = new Array(); // 直接使用assembly字段过滤指定装配物料的Internal ID,ID类条件用anyof可避免格式适配问题 filters[filters.length] = new nlobjSearchFilter('assembly', null, 'anyof', [assembly]); // 可额外添加过滤排除停用的BOM filters[filters.length] = new nlobjSearchFilter('isinactive', null, 'is', 'F'); var columns = new Array(); columns[columns.length] = new nlobjSearchColumn('internalid'); var searchResults = nlapiSearchRecord('bom', null, filters, columns); var internalId = ''; var bom = ''; // 先判断搜索结果非空再取值,避免空指针报错 if (searchResults && searchResults.length > 0) { internalId = searchResults[0].getId(); bom = searchResults[0].getValue('internalid'); }
补充说明
如果上述代码的assembly字段过滤不生效,可替换过滤字段为usedonassembly,这是NetSuite BOM记录中标记适用装配物料的另一个标准字段,适配不同版本的系统配置。
内容的提问来源于stack exchange,提问作者Stretch Performance
相关产品推荐
相关产品推荐

