SuiteScript客户端脚本加载已保存搜索报TypeError如何解决
问题原因
你遇到的报错是因为validateField函数的入参额外添加了search参数,覆盖了顶层通过define注入的N/search模块实例:
NetSuite执行客户端脚本的validateField入口方法时,只会传入1个context对象参数,你声明的第二个search参数没有实际传入值,默认是undefined,调用search.load时就会抛出“无法读取undefined的load属性”的错误。
修复方案
只需要把validateField函数的入参里多余的search删掉即可,修正后的代码片段如下:
// 去掉第二个search参数即可 function validateField(context) { debugger; var custPmt = context.currentRecord; if(context.fieldId == 'memo' ) { var memoValue = custPmt.getValue('memo'); var objSearch = search.load({ id: 'customsearch51957' }); //add filter var filter = search.createFilter({ name: 'memo', operator: search.Operator.IS, values: memoValue }); objSearch.filters.push(filter); var searchResults = objSearch.run().getRange({ start : 0, end : 10 }); var resultsCount = searchResults.length; if(resultsCount > 0) { alert(memoValue + " record already exists."); return false; } } return true; }
额外注意事项
- 所有SuiteScript入口函数的参数都是平台预设的,不要随意添加自定义参数,避免覆盖顶层作用域引入的模块变量
- 如果你担心后续再出现类似的作用域覆盖问题,可以给引入的模块起别名,比如把顶层的注入改成
define(['N/search'], function(searchModule) {}),后续调用搜索相关API时统一使用searchModule.load、searchModule.createFilter即可 - 客户端脚本调用已保存搜索时,要确保当前登录用户有对应搜索的查看权限,否则会出现权限类报错
内容的提问来源于stack exchange,提问作者Philip Spoehr
相关产品推荐
相关产品推荐

