简体   繁体   English

Suitescript2.0 中的 Netsuite record.save 返回 200OK 但不创建记录(但与 SuiteScript1.0 相同)

[英]Netsuite record.save in Suitescript2.0 is returning 200OK but not creating a record (but the same works with SuiteScript1.0)

I created a restlet script that is meant to post data into Netsuite to create an invoice record, and return the recordID.我创建了一个 restlet 脚本,用于将数据发布到 Netsuite 以创建发票记录,并返回 recordID。 The data is being sent from Postman in JSON format.数据以 JSON 格式从 Postman 发送。

When I tried it with Suitescript 1.0, it was able to create the record, however when I tried the same logic with Suitescript 2.0, it doesn't work.当我用 Suitescript 1.0 尝试它时,它能够创建记录,但是当我用 Suitescript 2.0 尝试相同的逻辑时,它不起作用。

The Suitescript 1.0 script did the following upon first request: Suitescript 1.0 脚本根据第一次请求执行以下操作:

  • returned 200 OK and the record ID of the newly created record返回 200 OK 和新创建记录的记录 ID

The Suitescript 2.0 script did the following: Suitescript 2.0 脚本执行以下操作:

  • initially returns error 400: bad request最初返回错误 400:错误的请求
  • upon sending once more, returns status 200OK but no record ID is returned再次发送时,返回状态 200OK 但不返回记录 ID
  • when I check the Netsuite UI, no invoice record is created当我检查 Netsuite UI 时,没有创建发票记录

This is the suitescript 1.0 code (which I found on the internet):这是suitescript 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; }

This is my suitescript 2.0 code:这是我的suitescript 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

I am super new to Netsuite and especially Suitescript 2.0.我是 Netsuite 的新手,尤其是 Suitescript 2.0。 Could anyone help me figure out what could have gone wrong while converting 1.0 to 2.0?谁能帮我弄清楚在将 1.0 转换为 2.0 时可能出了什么问题?

don't name your variable record不要命名你的变量记录

change 'var record = record.create...' to 'var recordObj = record.create...'将“var record = record.create...”更改为“var recordObj = record.create...”

avoid using variable names that are the same as SS 2.x modules避免使用与 SS 2.x 模块相同的变量名

First of all you have unclosed braces in your suitescript 2.0 version, try this:首先,您的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': '' }; } });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM