我创建了RESTlet,通过具有多个输入和下拉菜单的简单网页,可以更轻松地创建新的Invoice。我使用名为invoiceInfo的json将日期作为D-M-YYYY字符串发送,日期字符串是trandate的值。
在我连接的脚本(Suitescript 2.0)上,我拆分了trandate,然后创建了一个Date对象(我使用新的Number不是因为我的愚蠢,它只是那样工作)。然后我使用format.format
将日期格式化为Netsuite的可取格式。之后,我使用格式化日期设置trandate的值。
var splitedDate = invoiceInfo.trandate.split("-");
var dateObj = new Date(new Number(splitedDate[0]).valueOf(), (new Number(splitedDate[1]).valueOf()) - 1, new Number(splitedDate[2]).valueOf(), 0, 0, 0, 0);
var ffDate = format.format({
value: dateObj,
type: format.Type.DATE
});
invoiceRecord.setValue({
fieldId: "trandate",
value: ffDate,
ignoreFieldChange: true
});
提交发票时(动态模式设置为true)我在第83行出现错误,即第83行
invoiceRecord.setValue({fieldId:“trandate”,value:ffDate,ignoreFieldChange:true});
并得到这样的错误:
{
"type": "error.SuiteScriptError",
"name": "INVALID_FLD_VALUE",
"message": "Invalid date value (must be D/M/YYYY)",
"stack": ["anonymous(N/serverRecordService)", "<anonymous>(/SuiteScripts/Filip/_wystawianie_faktury_api.js:83)
[...]
当我用log.debug检查它时,我得到了这个:
“invoiceInfo.trandate”是(例如)“2019-03-15”
“dateObj”是“2019-03-15T07:00:00.000Z”
“ffDate”是“15/3/2019”
我尝试了很多选项,例如:-passing hardcoded date string“15/3/2019”我得到了同样的错误; - 我尝试了setText而不是setValue,并得到了另一个错误; - 我尝试更改@HomeIcon中的日期格式 - >设置首选项,然后硬编码所需的格式,但仍然无效;
感谢帮助
PS我在堆栈上写问题时有点新鲜。我已经尽力了!
日期值无效(必须为D / M / YYYY)
这意味着ffDate
不是日期对象。
首先要注意几点
option.value
。record.setValue
之前无需格式化。setText
要求字符串以用户格式正确格式化,因此最好使用setValue
而不是因为它处理所有转换等。所以我建议你将ISO字符串中的日期传递给RESTlet,它可以很容易地在NetSuite中转换为日期对象(使用新的Date()),然后将这个对象直接传递给record.setValue
。
简单回答:
var splitedDate = invoiceInfo.trandate.split("-");
var dateObj = new Date(new Number(splitedDate[0]).valueOf(), (new Number(splitedDate[1]).valueOf()) - 1, new Number(splitedDate[2]).valueOf(), 0, 0, 0, 0);
invoiceRecord.setValue({
fieldId: "trandate",
value: dateObj,
ignoreFieldChange: true
});
说明:Date字段的setValue接受javascript DateObj,因此无需格式化。