如何解决“请输入金额值”的问题。使用 Restlet 创建 NetSuite 发票时?

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

我正在使用 SuiteScript 2.0 以动态模式创建 NetSuite 发票,当我对第一个项目运行 commitLine 时,出现错误并显示“请输入金额值”。即使我已经使用 setCurrentSublistValue 提供了它。

代码的相关部分是从开始创建项目到完成创建项目,但我已经包含了完整的restlet,以防问题出在我的设置中。

这是我用来生成项目的 JSON 数据:

{"item":26,"amount":5706.48,"custcol_unit_price":"7.863035405","quantity":725735,"description":"7 月展示次数 - 2019 年数字(4 月至 7 月)- 自定义亲和力 (CAF) 动态CPM 7.5","行":1}

我在 setter 之后立即记录对 getCurrentSublistValue 的调用,以确保系统接受我发送的值,并获取 5706.48 的金额,所以我相信 setCurrentSublistValue 正在插入它。

/**
 *@NApiVersion 2.x
 *@NScriptType Restlet
 */
define(['N/record', 'N/error', 'N/log'],
  function(record, error, log) {
    function post(context) {
      log.audit("invoice", context);
      var rec = record.create({ type: "invoice", isDynamic: true });

      for (var fldName in context) {
        if (context.hasOwnProperty(fldName)) {
          if (fldName === "trandate") {
            rec.setValue(fldName, new Date(context[fldName]));
          } else if (fldName === "items") {
            var items = context[fldName]

            for (var idx in items) {
              var item = items[idx]
              // START CREATING ITEM
              log.audit('item', item)

              rec.selectNewLine({ sublistId: 'item' });
              for (var itemFldName in item) {
                log.audit(itemFldName, item[itemFldName])
                rec.setCurrentSublistValue({
                  sublistId: 'item',
                  fieldId: itemFldName,
                  value: item[itemFldName]
                })
                log.audit("current value", rec.getCurrentSublistValue({ sublistId: 'item', fieldId: itemFldName }))
              }

              rec.commitLine({ sublistId: 'item' });
              // FINISHED CREATING ITEM
            }
          } else {
            rec.setValue(fldName, context[fldName]);
          }

        }
      }
      var recordId = rec.save();

      return { success: true, message: recordId }
    }

    return {
      post: post
    };
  }
);

这是我在日志中看到的错误(第 34 行是 commitLine 调用):

{"type":"error.SuiteScriptError","name":"USER_ERROR","message":"请输入金额值。","stack":["anonymous(N/serverRecordService)","post (/SuiteScripts/api/submitInvoice.js:34)"],"cause":{"type":"内部错误","code":"USER_ERROR","details":"请输入金额值。" ,"userEvent":null,"stackTrace":["anonymous(N/serverRecordService)","post(/SuiteScripts/api/submitInvoice.js:34)"],"notifyOff":false},"id":" ","notifyOff":false,"userFacing":false}

预先感谢您的任何见解!

netsuite invoice suitescript2.0
3个回答
5
投票

尝试将数量设置为 1。当您提交该行时,系统可能会用计算值

quantity * amount
覆盖您的值。


4
投票

您首先设置金额,然后设置数量,并且没有设置费率。由于您在动态模式下处理记录,因此您需要按照与 UI 中完全相同的顺序设置字段值,否则您的数据将关闭。

如果您需要继续在动态模式下工作,那么您可能需要执行以下操作:

  1. 通过将
    forceSyncSourcing
    setCurrentSublistValue
    选项设置为
    true
    ,确保在设置项目字段时进行采购。这应确保正确设置依赖于该项目的任何列。
  2. 确保您以正确的顺序设置项目列;可能是项目,然后是数量,然后是金额。这样,动态模式应该不会重新计算您的金额。

我通常通过在标准模式而不是动态模式下工作来完全避免这个问题。我发现我很少需要在动态模式下工作。在标准模式下,字段顺序不再重要,因为您在提交整个记录后让服务器计算出来,而不是在设置每个字段时实时计算。


0
投票

我遇到了这个问题并且能够解决它。该错误表明需要填写必填字段才能保存记录。 原因:工作流程或脚本已将字段设为 Mqndatory。 修复:停用或取消部署。或者添加一个条件,使该交易表单免于要求该字段为必填字段。

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