使用SuiteScript 2.0创建发票时如何传递要转换的日期

时间:2019-03-01 10:45:26

标签: javascript netsuite restlet suitescript

我创建了 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我很想在堆栈上写问题。我尽力了!

2 个答案:

答案 0 :(得分:2)

  

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

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

首先要注意的几件事

  1. record.setValue要求值是dateTime对象。
  2. 如果您将无效的dateTime值传递给format.format,它将返回option.value,它不是dateTime对象。
  3. 如果有日期对象,则在使用record.setValue之前不需要对其进行格式化。
  4. 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,因此无需格式化。