首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Suitescript2.0中的Netsuite record.save返回200 in,但没有创建记录(但SuiteScript1.0的工作方式与此相同)

Suitescript2.0中的Netsuite record.save返回200 in,但没有创建记录(但SuiteScript1.0的工作方式与此相同)
EN

Stack Overflow用户
提问于 2020-10-11 17:18:34
回答 2查看 1.4K关注 0票数 0

我创建了一个restlet脚本,用于将数据发布到Netsuite以创建发票记录,并返回recordID。数据正以JSON格式从邮递员发送。

当我用Suitescript1.0尝试它时,它能够创建记录,但是当我尝试使用Suitescript2.0的相同逻辑时,它不起作用。

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

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

的记录ID

Suitescript 2.0脚本完成了以下操作:

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

这是我在互联网上找到的suitescript 1.0代码:

代码语言:javascript
复制
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;
}

这是我的suitescript 2.0代码:

代码语言:javascript
复制
// 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,特别是Suitescript2.0的超级新手。有人能帮我找出在将1.0转换为2.0时可能出错的地方吗?

EN

回答 2

Stack Overflow用户

发布于 2020-10-13 16:38:07

不要将变量记录命名为

更改'var record =record.create.‘to 'var recordObj =record.create.‘

避免使用与SS2.x模块相同的变量名称

票数 1
EN

Stack Overflow用户

发布于 2020-10-19 16:56:44

首先,您的suitescript 2.0版本中有未关闭的大括号,请尝试如下:

代码语言:javascript
复制
// 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': '' };
    }


});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64306950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档