如何从主Suitelet向自定义模块传递参数(NetSuite SuiteScript 2.0)
NetSuite SuiteScript 2.1 模块间变量传递解决方案
你的问题核心是调用UI模块函数时未传入ListOfVendors变量,导致模块内参数为NULL。以下是符合NetSuite最佳实践的解决步骤:
1. 修正UI模块的函数定义,添加参数接收
首先确保mod_ui模块的fn_cr8_sublist函数声明需要接收context和供应商列表两个参数,示例代码如下:
/** *@NApiVersion 2.1 *@NModuleScope SameAccount */ define(['N/log', 'N/ui/serverWidget'], function(log, serverWidget) { function fn_cr8_sublist(context, vendorList) { // 先校验参数是否有效 if (!vendorList || vendorList.length === 0) { log.error({title: '参数错误', details: '供应商列表未传递或为空'}); return; } // 构建包含MULTISELECT的表单示例 var form = serverWidget.createForm({title: '供应商多选选择'}); var vendorMultiSelect = form.addField({ id: 'custpage_vendor_multiselect', type: serverWidget.FieldType.MULTISELECT, label: '选择供应商' }); // 遍历供应商列表填充选项 vendorList.forEach(function(vendor) { vendorMultiSelect.addSelectOption({ value: vendor.id, text: vendor.name }); }); context.response.writePage(form); return form; } return { fn_cr8_sublist: fn_cr8_sublist }; });
2. 主Suitelet脚本中传递变量
在主脚本调用fn_cr8_sublist时,将获取到的ListOfVendors作为第二个参数传入:
/** *@NApiVersion 2.1 *@NScriptType Suitelet *@NModuleScope SameAccount */ define(['N/log', './mod_search4vendors', './mod_ui'], function(log, mod_search4vendors, mod_ui) { function fn_EntryPointFunction1(context) { // 获取格式化后的供应商列表 var ListOfVendors = mod_search4vendors.fn_Search4Vendors(context); log.debug({title: '获取到的供应商数据', details: ListOfVendors}); // 传递供应商列表给UI模块 var TEST_PASS_VARIABLES = mod_ui.fn_cr8_sublist(context, ListOfVendors); } return { onRequest: fn_EntryPointFunction1 }; } );
3. 确保搜索模块返回可直接使用的数据格式
如果你的mod_search4vendors模块返回的是NetSuite原生Search.Result对象数组,需要先提取所需字段转换为普通对象数组,避免传递复杂对象导致的问题:
/** *@NApiVersion 2.1 *@NModuleScope SameAccount */ define(['N/log', 'N/search'], function(log, search) { function fn_Search4Vendors(context) { var vendorSearch = search.create({ type: search.Type.VENDOR, columns: ['internalid', 'entityid'], filters: [] // 可根据需求添加筛选条件 }); var searchResults = vendorSearch.run().getRange({start: 0, end: 1000}); // 转换为包含id和name的普通对象数组 return searchResults.map(function(result) { return { id: result.getValue({name: 'internalid'}), name: result.getValue({name: 'entityid'}) }; }); } return { fn_Search4Vendors: fn_Search4Vendors }; });
额外注意事项
- 模块作用域一致性:确保所有自定义模块的
@NModuleScope标签值相同(如均为SameAccount),避免跨作用域访问限制。 - 参数校验:在每个模块函数开头添加参数校验逻辑,快速定位参数传递问题。
- 日志调试:使用
N/log模块打印关键变量值,验证数据是否正确传递。
内容的提问来源于stack exchange,提问作者Jerusalem Programmer
相关产品推荐
相关产品推荐

