NetSuite 开发日记 —— 库存详细信息记录更改数量问题

详细报错:

plaintext 复制代码
"type":"error.SuiteScriptError","name":"USER_ERROR","message":"在更改数量之后,您仍需要重新配置库存详细信息记录。"

"type":"error.SuiteScriptError","name":"USER_ERROR","message":"You still need to reconfigure the inventory detail record after changing the quantity."

原因:

SuiteAnswers ID 81448 的解答:

当系统启用了库存状态 功能,访问子记录时会发生已添加行的行为,对新创建的库存详细信息子记录的子列表使用 selectNewLine 方法会返回错误"在更改数量之后,您仍需要重新配置库存详细信息记录" 。如果遇到此问题,建议使用 selectline 方法。

解决方案

javascript 复制代码
var rec = record.transform({
  fromType: 'workorder',
  fromId: wordOrderId,
  toType: 'workordercompletion',
  isDynamic: true,
  defaultValues: {
    isbackflush: 'T'
  }
});

// 正文字段赋值
rec.setValue('trandate', new Date());
/** 其他正文字段赋值 **/

// 行字段赋值
var sublistId = 'component';
var lineCounts = rec.getLineCount(sublistId);
for (var i = 0; i < lineCounts; i++) {
  rec.selectLine({
    sublistId: sublistId,
    line: i
  });
  rec.setCurrentSublistValue({
    sublistId: sublistId,
    fieldId: 'quantity',
    value: lineData[i].qty,
  });
  var subRec = rec.getCurrentSublistSubrecord({
    sublistId: sublistId,
    fieldId: 'componentinventorydetail',
  });
  var detailData = lineData[i].details;
  var detailSublistId = 'inventoryassignment';
  for (var j = 0; j < detailData.length; j++) {
	// 根据SuiteAnswers的解答,因为启用了库存状态功能,此处需要使用selectLine方法,并非selectNewLine方法
    // subRec.selectNewLine({sublistId: detailSublistId});
    subRec.selectLine({sublistId: detailSublistId,line:j});
    subRec.setCurrentSublistText({
      sublistId: detailSublistId,
      fieldId: 'issueinventorynumber',
      text: detailData[j].invNum,
    });
    subRec.setCurrentSublistValue({
      sublistId: detailSublistId,
      fieldId: 'binnumber',
      value: detailData[j].binNum,
    });
    subRec.setCurrentSublistValue({
      sublistId: detailSublistId,
      fieldId: 'inventorystatus',
      value: detailData[j].status,
    });
    subRec.setCurrentSublistValue({
      sublistId: detailSublistId,
      fieldId: 'quantity',
      value: detailData[j].quantity,
    });
    subRec.commitLine({
      sublistId: detailSublistId
    });
  }
  rec.commitLine({
    sublistId: sublistId
  });
}

rec.save();

另外,根据实际测试,使用标准模式创建完工单也可以避免该报错。

javascript 复制代码
var rec = record.transform({
  fromType: 'workorder',
  fromId: wordOrderId,
  toType: 'workordercompletion',
  isDynamic: false,
  defaultValues: {
    isbackflush: 'T'
  }
});

// 正文字段赋值
rec.setValue('trandate', new Date());
/** 其他正文字段赋值 **/

// 行字段赋值
var sublistId = 'component';
var lineCounts = rec.getLineCount(sublistId);
for (var i = 0; i < lineCounts; i++) {
  rec.setSublistValue({
    sublistId: sublistId,
    fieldId: 'quantity',
    value: lineData[i].qty,
    line: i
  });
  var subRec = rec.getSublistSubrecord({
    sublistId: sublistId,
    fieldId: 'componentinventorydetail',
    line: i
  });
  var detailData = lineData[i].details;
  var detailSublistId = 'inventoryassignment';
  for (var j = 0; j < detailData.length; j++) {
	// 标准模式下,给issueinventorynumber赋值时,建议使用setSublistValue方法,而非setSublistText方法
   // 原因:当系统中存在不同物料但库存编码相同时,此处可能发生USER_ERROR的错误,此类错误较难排查
    subRec.setSublistValue({
      sublistId: detailSublistId,
      fieldId: 'issueinventorynumber',
      value: detailData[j].invNumId,
	  line: j
    });
    subRec.setSublistValue({
      sublistId: detailSublistId,
      fieldId: 'binnumber',
      value: detailData[j].binNum,
	  line: j
    });
    subRec.setSublistValue({
      sublistId: detailSublistId,
      fieldId: 'inventorystatus',
      value: detailData[j].status,
	  line: j
    });
    subRec.setSublistValue({
      sublistId: detailSublistId,
      fieldId: 'quantity',
      value: detailData[j].quantity,
	  line: j
    });
  }
}

rec.save();

其他参考答案:

相关推荐
闲人编程2 天前
Spark使用过程中的 15 个常见问题、详细解决方案
python·ajax·spark·解决方案·调度·作业
闲人编程2 天前
Hadoop 使用过程中 15 个常见问题的详细描述、解决方案
大数据·hadoop·eclipse·解决方案·yarn·配置文件
颜淡慕潇1 个月前
【K8S系列】Kubernetes pod节点Unknown 问题及解决方案详解【已解决】
网络·后端·云原生·容器·kubernetes·解决方案
青云交1 个月前
大数据新视界 --大数据大厂之数据脱敏技术在大数据中的应用与挑战
大数据·解决方案·挑战·数据脱敏·未来趋势·应用场景·发展现状
网络研究院1 个月前
人工智能正在扼杀云计算的可持续性
人工智能·云计算·能源·解决方案·观点·可持续
网络研究院2 个月前
网络安全中的 EDR 是什么:概述和功能
安全·解决方案·技术·实施·功能·edr·端点检测和响应
NetSuite知识会3 个月前
NetSuite AI 图生代码
人工智能·netsuite·文生代码
NSJim3 个月前
百度网盘电脑版播放视频没有声音 - 解决方案
解决方案·百度网盘·视频无声
x-cmd3 个月前
[240809] 模拟计算:回归本源,探索可持续计算的未来 | RISV CPU Bug 可导致非特权用户读写内存任意位置
人工智能·计算机·bug·内存·解决方案·模拟计算·能耗
武汉唯众智创5 个月前
智能家居安防系统教学解决方案
智能家居·解决方案·安防系统