如何在SuiteScript自定义公共工具库中调用NetSuite原生模块
自定义公共工具模块访问NetSuite原生模块解决方案
错误写法说明
你第一种全局变量挂载的写法不符合NetSuite SuiteScript 2.x的模块加载规范,没有通过AMD的define函数声明依赖,所以无法在脚本内部引入N/开头的官方模块,无法正常调用NetSuite能力。
正确实现步骤
你第二种AMD模块化写法的核心逻辑是正确的,只需要配套完善配置和调用逻辑即可正常使用,具体操作如下:
- 第一步:上传工具脚本并记录路径
将优化后的工具脚本上传到NetSuite文件柜,记录完整路径,例如路径为/SuiteScripts/common/matts_custom_functions.js。
优化后的工具脚本代码示例:/** * @NApiVersion 2.1 * @NModuleScope Public */ define(['N/record', 'N/search'], (record, search) => { const MattsFunctions = { dynamicTransactionSearch: (sentId) => { const thisRecord = record.load({ type: record.Type.SALES_ORDER, id: sentId }) return thisRecord.id } // 其余常用函数可直接在该对象内扩展 } return MattsFunctions }) - 第二步:编写AMD配置文件
新建JSON格式的AMD配置文件(例如命名为custom_amd_config.json),上传到文件柜,内容参考如下:
注意:paths内的路径对应工具脚本的文件柜路径,不需要加{ "paths": { "mattsCommon": "/SuiteScripts/common/matts_custom_functions" } }.js后缀。 - 第三步:在业务脚本中调用工具方法
在你的Map/Reduce等业务脚本的头部注解添加@NAmdConfig指向AMD配置文件的完整路径,然后在define依赖中引入配置的模块名即可调用,示例:/** * @NApiVersion 2.1 * @NScriptType MapReduceScript * @NAmdConfig /SuiteScripts/common/custom_amd_config.json */ define(['N/log', 'mattsCommon'], (log, mattsCommon) => { const getInputData = () => { // 调用自定义公共方法 const resultOrderId = mattsCommon.dynamicTransactionSearch(10001) log.debug('公共方法调用返回值', resultOrderId) // 后续业务逻辑 } // 其余Map/Reduce阶段逻辑省略 return { getInputData: getInputData } })
常见报错排查:如果出现模块加载失败的提示,优先检查AMD配置中填写的工具脚本路径是否和实际路径完全一致,路径区分大小写,不要遗漏层级或者多写斜杠。
内容的提问来源于stack exchange,提问作者Matt Kraemer
相关产品推荐
相关产品推荐

