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

如何通过SuiteScript访问自定义记录的自定义子列表数据?

当然可以通过SuiteScript访问自定义记录上的自定义子列表啦!你遇到的currentRecord.getSublists()报错问题,只是因为用错了对应上下文的方法而已,我来给你详细拆解:

为什么currentRecord.getSublists()会报错

在SuiteScript 2.x的N/currentRecord或N/record模块里,根本没有getSublists()这个方法。正确获取记录所有子列表ID的方法是getSublistIds(),不管是标准子列表还是自定义子列表都适用。

客户端脚本访问BOM子列表

如果是在客户端脚本(比如客户端脚本、Suitelet的客户端逻辑)中操作,你可以用N/currentRecord模块和UI中加载的记录交互。下面是一个实用示例,用来访问你通过已保存搜索填充的BOM子列表:

define(['N/currentRecord'], function(currentRecord) {
    function handleBomSublist() {
        // 获取当前活跃的记录
        var currentRec = currentRecord.get();
        
        // 获取记录上所有的子列表ID
        var allSublistIds = currentRec.getSublistIds();
        console.log('可用子列表:', allSublistIds);
        
        // 替换成你实际的BOM子列表ID(可以在自定义记录配置中查看)
        var bomSublistId = 'custpage_bom_sublist';
        
        if (allSublistIds.includes(bomSublistId)) {
            // 获取BOM子列表的行数
            var lineCount = currentRec.getLineCount({ sublistId: bomSublistId });
            console.log('BOM子列表行数:', lineCount);
            
            // 遍历每一行提取数据
            for (var i = 0; i < lineCount; i++) {
                var itemId = currentRec.getCurrentSublistValue({
                    sublistId: bomSublistId,
                    fieldId: 'item', // 替换成你实际的字段ID
                    line: i
                });
                var quantity = currentRec.getCurrentSublistValue({
                    sublistId: bomSublistId,
                    fieldId: 'quantity', // 替换成你实际的字段ID
                    line: i
                });
                
                console.log(`第${i+1}行: 物料ID=${itemId}, 数量=${quantity}`);
            }
        }
    }

    // 在子列表填充完成后触发这个函数(比如字段变更、搜索完成后)
    return {
        fieldChanged: handleBomSublist // 根据你的触发事件调整
    };
});

服务器端脚本访问BOM子列表

如果是服务器端脚本(比如用户事件脚本、计划脚本),则需要用N/record模块加载或操作记录。因为你的子列表是通过已保存搜索填充的,所以记录加载后数据应该已经存在:

define(['N/record', 'N/log'], function(record, log) {
    function processBomSublist(context) {
        // 对于用户事件脚本,用context.newRecord;也可以直接加载指定记录
        var customRec = context.newRecord;
        // 或者:var customRec = record.load({ type: 'customrecord_你的记录类型', id: 1234 });
        
        var allSublistIds = customRec.getSublistIds();
        var bomSublistId = 'custpage_bom_sublist';
        
        if (allSublistIds.includes(bomSublistId)) {
            var lineCount = customRec.getLineCount({ sublistId: bomSublistId });
            log.debug('BOM子列表行数', lineCount);
            
            for (var i = 0; i < lineCount; i++) {
                var itemId = customRec.getSublistValue({
                    sublistId: bomSublistId,
                    fieldId: 'item',
                    line: i
                });
                var quantity = customRec.getSublistValue({
                    sublistId: bomSublistId,
                    fieldId: 'quantity',
                    line: i
                });
                
                log.debug(`第${i+1}行数据`, { 物料ID: itemId, 数量: quantity });
            }
        }
    }

    return {
        beforeLoad: processBomSublist // 根据你的脚本事件调整
    };
});

关键注意事项

  • 核对子列表ID: 你可以在自定义记录的子列表配置中找到它(通常以custpage_或custrecord_开头)。
  • 客户端脚本的时机: 如果子列表是用户操作后(比如点击搜索按钮)才填充的,要确保你的脚本在操作完成后再运行(比如绑定到按钮的点击事件或搜索完成后的回调)。
  • 字段ID: 把示例中的item和quantity替换成你BOM子列表里实际使用的字段ID。

内容的提问来源于stack exchange,提问作者shawleigh17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:28:27