我创建了 RESTlet ,它使通过带有多个输入和下拉菜单的简单网页更容易创建新发票。我使用称为invoiceInfo的json作为 D-M-YYYY 字符串发送日期,日期字符串是trandate的值。
在我连接到的脚本(Suitescript 2.0)上,我拆分了trandate,然后创建了一个Date对象(我使用新的Number并不是因为我的愚蠢,它只是那样工作)< / em>。然后,我使用HTTP_SC_ACCEPT
将日期格式化为Netsuite所需的格式。之后,我使用格式化日期设置trandate的值。
format.format
提交发票(动态模式设置为true)时,在此行数字83 上出现错误
invoiceRecord.setValue({ fieldId:“ trandate”, 值:ffDate, ignoreFieldChange:true });
并收到这样的错误:
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
});
当我用log.debug检查它时,我得到了:
“ invoiceInfo.trandate”是(例如)“ 2019-03-15”
“ dateObj”是“ 2019-03-15T07:00:00.000Z”
“ ffDate”为“ 15/3/2019”
我尝试了很多选择,例如: 传递硬编码的日期字符串“ 15/3/2019”时,我遇到相同的错误; -我尝试使用setText而不是setValue并得到另一个错误; -我尝试在@HomeIcon->设置首选项中更改日期格式,然后将所需的格式进行了硬编码,但仍然无法使用;
感谢帮助
PS我很想在堆栈上写问题。我尽力了!
答案 0 :(得分:2)
无效的日期值(必须为D / M / YYYY)
这意味着ffDate
不是日期对象。
首先要注意的几件事
option.value
,它不是dateTime对象。record.setValue
之前不需要对其进行格式化。setText
要求将字符串正确设置为用户格式,因此最好使用setValue
来处理所有转换等。所以我建议您将ISO字符串中的日期传递给RESTlet,可以轻松地将其转换为NetSuite中的date对象(使用new Date()),然后将该对象直接传递给record.setValue
。 / p>
答案 1 :(得分:0)
简单答案:
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
});
说明:“日期”字段的setValue接受JavaScript DateObj,因此无需格式化。