NetSuite SS1.0遍历inventorydetail子记录获取货位号报错求助
SuiteScript 1.0 遍历inventorydetail子记录库位异常排查
问题复现场景
- 事务记录类型:
itemfulfillment(发货单) - 物料行1:库存明细关联Bin1、Bin2两个库位,读取正常
- 物料行2:库存明细关联Bin3、Bin4两个库位,读取时触发报错
- 原实现代码:
var recordid = nlapiGetNewRecord().getId(); var record = nlapiLoadRecord('itemfulfillment', recordid); var linenum = record.getLineItemCount('item'); for (var i = 1; i <= linenum; i++) { var subrec = record.viewLineItemSubrecord('item', 'inventorydetail', i); var invnum = subrec.getLineItemCount('inventoryassignment'); for (var x = 1; x <= invnum; x++){ var invitem = subrec.getLineItemText('inventoryassignment', 'binnumber', x); nlapiLogExecution('DEBUG', 'invitem ' + invitem); } }
核心报错原因
- API本身的设计缺陷:SS1.0的
viewLineItemSubrecord返回的子记录对象共用同一块临时内存上下文,遍历完第一行子记录的库存分配行后,子记录内部的行指针不会自动重置,切换到第二行子记录时指针仍停留在上一次遍历的末尾位置,直接读取行数据就会触发行索引越界错误。 - 不必要的记录重载引发状态不一致:UE脚本的
beforeSubmit/afterSubmit上下文里,nlapiGetNewRecord()已经持有当前提交事务的完整记录对象,重复调用nlapiLoadRecord拉取数据库侧的记录副本,会出现内存中记录状态与实际提交行数据不匹配的问题,进一步提升子记录读取的报错概率。 - 缺少空值校验逻辑:原代码没有判断子记录是否存在、库位字段值是否为空,遇到未启用库位管理的物料行、或者未填写库位的分配行时,会直接抛出空引用错误。
可直接落地的修正代码
// 直接使用UE上下文自带的当前记录对象,无需重复load var currentRec = nlapiGetNewRecord(); var itemLineCount = currentRec.getLineItemCount('item'); for (var i = 1; i <= itemLineCount; i++) { // 逐行获取库存明细子记录,跳过无库存明细的物料行 var invDetailSubrec = currentRec.viewLineItemSubrecord('item', 'inventorydetail', i); if (!invDetailSubrec) { continue; } // 拿到子记录后第一时间读取分配行总数,避免指针偏移导致计数错误 var assignLineCount = invDetailSubrec.getLineItemCount('inventoryassignment'); for (var x = 1; x <= assignLineCount; x++) { // 增加空值兜底,兼容库位为空的场景 var binNumber = invDetailSubrec.getLineItemText('inventoryassignment', 'binnumber', x) || ''; nlapiLogExecution('DEBUG', '第' + i + '行物料对应库位', binNumber); } // 手动释放子记录引用,避免上下文复用导致的指针污染 invDetailSubrec = null; }
补充适配说明
如果脚本逻辑部署在afterSubmit阶段,必须读取已落库的记录数据,加载记录时请显式指定动态模式,确保子记录指针能正确重置:
var recordid = nlapiGetNewRecord().getId(); // 显式指定动态模式加载 var currentRec = nlapiLoadRecord('itemfulfillment', recordid, {recordmode: 'dynamic'}); // 后续遍历逻辑和上述修正代码一致
内容的提问来源于stack exchange,提问作者Mil
相关产品推荐
相关产品推荐

