SS2.0销售订单转物料履行单设置子列表值报getSublistName不是函数错误
NetSuite SuiteScript 2.0 生成物料履行单报错
field.getSublistName is not a function解决方案 报错根因
field.getSublistName is not a function 是SuiteScript 2.x的内部运行时错误,触发原因是你尝试修改的行字段在当前上下文无效:要么是遍历到了已关闭、无需履行的销售订单行,这类行在生成的物料履行单中itemreceive字段不存在或为只读,强制赋值就会触发该报错。
最优解决方案
你不需要手动循环逐行设置itemreceive为true,直接在record.transform时传入defaultValues参数即可,系统会自动为所有可履行行标记itemreceive = true,代码如下:
var itemFulfillment = record.transform({ fromType: record.Type.SALES_ORDER, fromId: salesOrderId, toType: record.Type.ITEM_FULFILLMENT, isDynamic: true, defaultValues: { itemreceive: true // 若账户启用多地点库存,可在此指定履行仓库:location: 你的仓库ID } }); const id = itemFulfillment.save();
需逐行控制场景的修复方案
如果你确实需要逐行判断是否履行,只需要在循环中跳过无效行即可,代码如下:
var itemFulfillment = record.transform({ fromType: record.Type.SALES_ORDER, fromId: salesOrderId, toType: record.Type.ITEM_FULFILLMENT, isDynamic: true }); var lineCount = itemFulfillment.getLineCount({ sublistId: 'item' }); for (var i = 0; i < lineCount; i++) { itemFulfillment.selectLine({ sublistId: 'item', line: i }); // 跳过已关闭的行 var isLineClosed = itemFulfillment.getCurrentSublistValue({ sublistId: 'item', fieldId: 'isclosed' }); if (isLineClosed) { itemFulfillment.cancelLine({sublistId: 'item'}); continue; } // 跳过itemreceive字段不可编辑的行 var itemReceiveField = itemFulfillment.getCurrentSublistField({ sublistId: 'item', fieldId: 'itemreceive' }); if (!itemReceiveField || itemReceiveField.isReadOnly) { itemFulfillment.cancelLine({sublistId: 'item'}); continue; } // 合法行再赋值 itemFulfillment.setCurrentSublistValue({ sublistId: 'item', fieldId: 'itemreceive', value: true }); itemFulfillment.commitLine({ sublistId: 'item' }); } const id = itemFulfillment.save();
内容的提问来源于stack exchange,提问作者cja
相关产品推荐
相关产品推荐

