如何在使用SuiteScript 2.0创建发票时传递日期以进行交易

问题描述 投票:0回答:2

我创建了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我在堆栈上写问题时有点新鲜。我已经尽力了!

javascript netsuite restlet suitescript
2个回答
2
投票

日期值无效(必须为D / M / YYYY)

这意味着ffDate不是日期对象。

首先要注意几点

  1. record.setValue要求value为dateTime对象。
  2. 如果将无效的dateTime值传递给format.format,则返回不是dateTime对象的option.value
  3. 如果您有日期对象,则在使用record.setValue之前无需格式化。
  4. setText要求字符串以用户格式正确格式化,因此最好使用setValue而不是因为它处理所有转换等。

所以我建议你将ISO字符串中的日期传递给RESTlet,它可以很容易地在NetSuite中转换为日期对象(使用新的Date()),然后将这个对象直接传递给record.setValue


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
});

说明:Date字段的setValue接受javascript DateObj,因此无需格式化。

© www.soinside.com 2019 - 2024. All rights reserved.