NetSuite客户端脚本iOS端批量添加销售项异常问题
NetSuite客户端脚本iOS兼容性问题:批量添加商品仅保留最后一项
我在NetSuite报价单准备页面的商品子列表底部批量添加销售项,写了个客户端脚本,接收商品ID列表后循环插入新行。代码在Windows上完全正常,但在所有iOS设备上,只会添加最后一项商品,之前的行都被它替换掉。试过用selectNewLine替代insertLine、把for循环改成forEach,都没解决问题。
原代码如下:
for (var i = 0;i < itemMod.length; i++){ currentRecord.insertLine({ sublistId: 'item', line: i // 使用循环索引作为行号 }); // 设置新行的商品ID currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: itemMod[i].id }); // 设置新行的数量 currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: itemMod[i].count }); // 提交新行 currentRecord.commitLine({ sublistId: 'item' }); }
问题原因
iOS上的NetSuite客户端脚本引擎对商品子列表的行索引处理存在异步延迟:循环快速执行时,insertLine和commitLine的DOM更新未完成,后续循环的行索引计算出错,导致所有插入操作都指向最后一行位置。
修复方案
方案1:倒序插入+使用selectNewLine
倒序遍历数组,避免行索引偏移;同时用selectNewLine自动定位到子列表末尾的新行,无需手动指定行号,适配移动端异步逻辑。
修改后的代码:
// 倒序遍历数组,避免行索引冲突 for (var i = itemMod.length - 1; i >= 0; i--) { // 选择子列表末尾的新行 currentRecord.selectNewLine({ sublistId: 'item' }); currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: itemMod[i].id }); currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: itemMod[i].count }); currentRecord.commitLine({ sublistId: 'item' }); }
方案2:强制同步行索引(备用)
如果倒序方案仍有问题,可在每次提交后强制刷新子列表的行索引,确保下一次插入的位置正确:
for (var i = 0;i < itemMod.length; i++){ // 先获取当前子列表的总行数,插入到末尾 var totalLines = currentRecord.getLineCount({sublistId: 'item'}); currentRecord.insertLine({ sublistId: 'item', line: totalLines }); currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: itemMod[i].id }); currentRecord.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: itemMod[i].count }); currentRecord.commitLine({ sublistId: 'item' }); // 强制刷新行索引 currentRecord.selectLine({sublistId: 'item', line: totalLines}); }
验证要点
- 确认
itemMod数组的id和count值在iOS设备上能正常读取,无数据类型差异(比如数字转字符串的问题)。 - 避免在循环中执行过多同步操作,减少移动端脚本引擎的处理压力。
内容的提问来源于stack exchange,提问作者Gannon Coleman
相关产品推荐
相关产品推荐

