【问题标题】:Netsuite record.save in Suitescript2.0 is returning 200OK but not creating a record (but the same works with SuiteScript1.0)Suitescript2.0 中的 Netsuite record.save 返回 200OK 但未创建记录(但同样适用于 SuiteScript1.0)
【发布时间】:2020-10-11 17:18:34
【问题描述】:

我创建了一个用于将数据发布到 Netsuite 以创建发票记录并返回记录 ID 的 restlet 脚本。 数据以 JSON 格式从 Postman 发送。

当我用 Suitescript 1.0 尝试它时,它能够创建记录,但是当我用 Suitescript 2.0 尝试相同的逻辑时,它不起作用。

Suitescript 1.0 脚本在第一次请求时执行以下操作:

  • 返回200 OK和新建记录的记录ID

Suitescript 2.0 脚本执行以下操作:

  • 最初返回错误 400:错误请求
  • 再次发送时,返回状态 200OK 但不返回记录 ID
  • 当我检查 Netsuite UI 时,没有创建发票记录

这是套件脚本 1.0 代码(我在互联网上找到的):

function createRecord(datain)
{
    var err = new Object();
    var record = nlapiCreateRecord('invoice');
    for (var fieldname in datain)
    {
   if (datain.hasOwnProperty(fieldname))
   {
    if (fieldname != 'recordtype' && fieldname != 'id')
    {
     var value = datain[fieldname];
    if (value && typeof value != 'object') // process non-item fields
     {
      record.setFieldValue(fieldname, value);
     }
     if (value && typeof value == 'object') // process line item objects
     {
      for (var itemobject in value)
      {
       record.selectNewLineItem('item');
       var lineitemobject= value[itemobject];
       for (var lineitemfieldname in lineitemobject )
       {          
        var lineitemfieldvalue = lineitemobject[lineitemfieldname];
        record.setCurrentLineItemValue('item',lineitemfieldname,lineitemfieldvalue);      
       }
       record.commitLineItem('item');                            
      }
     }
    }
   }
  }

    var recordId = nlapiSubmitRecord(record);
    return recordId;
}

这是我的套件脚本 2.0 代码:

// Create a NetSuite invoice
/**
 * @NApiVersion 2.0
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */

//define and declare modules
define(['N/record'], function(record)
{
//function to create a new invoice record with data from API

function createInvoice(datain)
{
    //create record
    var record = record.create({
        type: record.Type.INVOICE,
        isDynamic: false, 
        defaultValues: null
    });

    for (var fieldname in datain)
    {
        if (datain.hasOwnProperty(fieldname))
        {
        if (fieldname!='recordtype' && fieldname!='id')
        {
            var value = datain[fieldname];

            // process non-item fields
            if (value && typeof value != 'object')
            {
                record.setValue({
                fieldId: fieldname,
                value: value
                });
            }   //close non-item field processing if stmt

            // process line item sublist objects
            if (value && typeof value == 'object')
            {
                for (var itemobject in value)
                {
                    record.selectNewLine({sublistId:'item'});   //selects a new line at the end of a sublist
                    var lineitemobject= value[itemobject];
                    for (var lineitemfieldname in lineitemobject)
                    {
                        var lineitemfieldvalue = lineitemobject[lineitemfieldname];
                        record.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: lineitemfieldname,
                            value: lineitemfieldvalue
                        });
                    }   //close lineitemobject for loop
                    record.commitLine({sublistId: 'item'});//Commits the currently selected line on a sublist --> dynamic mode only
                }   //close value for loop
            }   //close line item processing if stmt
        }   //close hasOwnProperty if stmt
        }   //close datain processing for loop

    var recordId = record.save({
            enableSourcing: true,   //enables sourcing during record update
            ignoreMandatoryFields: false    
        });
    return recordId;

}   //close create invoice function

return {
        'post' : createInvoice
};
}); //close define module declaration

我是 Netsuite 的超级新手,尤其是 Suitescript 2.0。谁能帮我弄清楚在将 1.0 转换为 2.0 时可能出了什么问题?

【问题讨论】:

    标签: javascript netsuite suitescript invoice suitescript2.0


    【解决方案1】:

    不要命名你的变量记录

    将 'var record = record.create...' 更改为 'var recordObj = record.create...'

    避免使用与 SS 2.x 模块相同的变量名

    【讨论】:

      【解决方案2】:

      首先,您的 suitescript 2.0 版本中有未闭合的大括号,试试这个:

      // Create a NetSuite invoice
      /**
       * @NApiVersion 2.0
       * @NScriptType Restlet
       * @NModuleScope SameAccount
       */
      
      //define and declare modules
      define(['N/record'], function ( record) {
      
          var handler = {};
      //function to create a new invoice record with data from API
      
      function createInvoice(datain)
      {
          //create record
          var record = record.create({
              type: record.Type.INVOICE,
              isDynamic: false, 
              defaultValues: null
          });
      
          for (var fieldname in datain)
          {
              if (datain.hasOwnProperty(fieldname))
              {
              if (fieldname!='recordtype' && fieldname!='id')
              {
                  var value = datain[fieldname];
      
                  // process non-item fields
                  if (value && typeof value != 'object')
                  {
                      record.setValue({
                      fieldId: fieldname,
                      value: value
                      });
                  }   //close non-item field processing if stmt
      
                  // process line item sublist objects
                  if (value && typeof value == 'object')
                  {
                      for (var itemobject in value)
                      {
                          record.selectNewLine({sublistId:'item'});   //selects a new line at the end of a sublist
                          var lineitemobject= value[itemobject];
                          for (var lineitemfieldname in lineitemobject)
                          {
                              var lineitemfieldvalue = lineitemobject[lineitemfieldname];
                              record.setCurrentSublistValue({
                                  sublistId: 'item',
                                  fieldId: lineitemfieldname,
                                  value: lineitemfieldvalue
                              });
                          }   //close lineitemobject for loop
                          record.commitLine({sublistId: 'item'});//Commits the currently selected line on a sublist --> dynamic mode only
                      }   //close value for loop
                  }   //close line item processing if stmt
              }   //close hasOwnProperty if stmt
              }   //close datain processing for loop
      
          var recordId = record.save({
                  enableSourcing: true,   //enables sourcing during record update
                  ignoreMandatoryFields: false    
              });
          return recordId;
          }
      }
         
      handler.post = function (context) {
          try {
              var InvoiceID=createInvoice(context);
         //add your return stuff
          }
          catch(e)
          {
              log.error('Error Creating Invoice', e.message);
                  return { 'responseStructure': { 'codeStatus': 'ERROR', 'descriptionStatus': 'blablablbla' }, 'internalId': '' };
          }
      
      
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-20
        • 2023-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        相关资源
        最近更新 更多