【问题标题】:How can I pass a Date to trandate while creating an Invoice with SuiteScript 2.0如何在使用 SuiteScript 2.0 创建发票时传递日期以进行交易
【发布时间】:2019-03-01 10:45:26
【问题描述】:

我创建了 RESTlet,它可以通过具有多个输入和下拉菜单的简单网页更轻松地创建新发票。我使用名为 invoiceInfo 的 json 将日期作为 D-M-YYYY 字符串发送,日期字符串是 trandate 的值。
在我连接到的脚本 (Suitescript 2.0) 上,我拆分 trandate,然后创建一个 Date 对象 (我使用 new 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行遇到错误,即这一行

invoiceRecord.setValue({ fieldId: "翻译", 值:ff日期, 忽略字段更改:真 });

得到了这样的错误:

{
    "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”

我尝试了很多选项,例如: - 传递硬编码的日期字符串“15/3/2019”我得到同样的错误; -我尝试了 setText 而不是 setValue 并得到了另一个错误; -我尝试在@HomeIcon -> Set Preferences 中更改日期格式,然后给出所需的硬编码格式,但它仍然不起作用;

感谢您的帮助

PS 我对在堆栈上写问题有点陌生。我尽力了!

【问题讨论】:

    标签: javascript netsuite suitescript


    【解决方案1】:

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

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

    首先要注意几点

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

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

    【讨论】:

    • 现在我收到这样的错误:{\\\"type\\\":\\\"internal error\\\",\\\"code\\\":\\ \"DATE_EXPECTED\\\",\\\"details\\\":\\\"您在需要日历日期的字段中输入了\\'null\\'。\\\\n请返回并更改这个值到正确的日期。\\\\",\\\\"userEvent\\\\":null,\\\\"stackTrace\\\\":[\\\\"anonymous(N/serverRecordService)\\\\", \\" 当我查看调试时,我看到 new Date(invoiceInfo.trandate) 作为正确的 Date 对象(“2019-03-05T00:00:00.000Z”)。你还有其他想法吗?我是暂时坚持了一段时间。
    • 您能提供您的源 JSON 和代码吗?根据 NetSuite 错误日志,您正在为日期字段设置空值。您的 JSON on 设置值的方法一定有问题。
    • 我公司有人对代码做了一些错误的更改,这就是它根本不起作用的原因。当我删除它们时,它终于起作用了!仍然感谢您的帮助!
    【解决方案2】:

    简单回答:

    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,因此无需格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-19
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多