如何通过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
相关产品推荐
相关产品推荐

