我正在使用 SuiteScript 2.0 以动态模式创建 NetSuite 发票,当我对第一个项目运行 commitLine 时,出现错误并显示“请输入金额值”。即使我已经使用 setCurrentSublistValue 提供了它。
代码的相关部分是从开始创建项目到完成创建项目,但我已经包含了完整的restlet,以防问题出在我的设置中。
这是我用来生成项目的 JSON 数据:
{"item":26,"amount":5706.48,"custcol_unit_price":"7.863035405","quantity":725735,"description":"7 月展示次数 - 2019 年数字(4 月至 7 月)- 自定义亲和力 (CAF) 动态CPM 7.5","行":1}
我在 setter 之后立即记录对 getCurrentSublistValue 的调用,以确保系统接受我发送的值,并获取 5706.48 的金额,所以我相信 setCurrentSublistValue 正在插入它。
/**
*@NApiVersion 2.x
*@NScriptType Restlet
*/
define(['N/record', 'N/error', 'N/log'],
function(record, error, log) {
function post(context) {
log.audit("invoice", context);
var rec = record.create({ type: "invoice", isDynamic: true });
for (var fldName in context) {
if (context.hasOwnProperty(fldName)) {
if (fldName === "trandate") {
rec.setValue(fldName, new Date(context[fldName]));
} else if (fldName === "items") {
var items = context[fldName]
for (var idx in items) {
var item = items[idx]
// START CREATING ITEM
log.audit('item', item)
rec.selectNewLine({ sublistId: 'item' });
for (var itemFldName in item) {
log.audit(itemFldName, item[itemFldName])
rec.setCurrentSublistValue({
sublistId: 'item',
fieldId: itemFldName,
value: item[itemFldName]
})
log.audit("current value", rec.getCurrentSublistValue({ sublistId: 'item', fieldId: itemFldName }))
}
rec.commitLine({ sublistId: 'item' });
// FINISHED CREATING ITEM
}
} else {
rec.setValue(fldName, context[fldName]);
}
}
}
var recordId = rec.save();
return { success: true, message: recordId }
}
return {
post: post
};
}
);
这是我在日志中看到的错误(第 34 行是 commitLine 调用):
{"type":"error.SuiteScriptError","name":"USER_ERROR","message":"请输入金额值。","stack":["anonymous(N/serverRecordService)","post (/SuiteScripts/api/submitInvoice.js:34)"],"cause":{"type":"内部错误","code":"USER_ERROR","details":"请输入金额值。" ,"userEvent":null,"stackTrace":["anonymous(N/serverRecordService)","post(/SuiteScripts/api/submitInvoice.js:34)"],"notifyOff":false},"id":" ","notifyOff":false,"userFacing":false}
预先感谢您的任何见解!
尝试将数量设置为 1。当您提交该行时,系统可能会用计算值
quantity * amount
覆盖您的值。
您首先设置金额,然后设置数量,并且没有设置费率。由于您在动态模式下处理记录,因此您需要按照与 UI 中完全相同的顺序设置字段值,否则您的数据将关闭。
如果您需要继续在动态模式下工作,那么您可能需要执行以下操作:
forceSyncSourcing
的 setCurrentSublistValue
选项设置为 true
,确保在设置项目字段时进行采购。这应确保正确设置依赖于该项目的任何列。我通常通过在标准模式而不是动态模式下工作来完全避免这个问题。我发现我很少需要在动态模式下工作。在标准模式下,字段顺序不再重要,因为您在提交整个记录后让服务器计算出来,而不是在设置每个字段时实时计算。
我遇到了这个问题并且能够解决它。该错误表明需要填写必填字段才能保存记录。 原因:工作流程或脚本已将字段设为 Mqndatory。 修复:停用或取消部署。或者添加一个条件,使该交易表单免于要求该字段为必填字段。