You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从主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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:36:30