我创建了一个restlet脚本,用于将数据发布到Netsuite以创建发票记录,并返回recordID。数据正以JSON格式从邮递员发送。
当我用Suitescript1.0尝试它时,它能够创建记录,但是当我尝试使用Suitescript2.0的相同逻辑时,它不起作用。
Suitescript 1.0脚本在第一次请求时执行了以下操作:
的记录ID
Suitescript 2.0脚本完成了以下操作:
这是我在互联网上找到的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;
}
这是我的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
我是Netsuite,特别是Suitescript2.0的超级新手。有人能帮我找出在将1.0转换为2.0时可能出错的地方吗?
发布于 2020-10-13 16:38:07
不要将变量记录命名为
更改'var record =record.create.‘to 'var recordObj =record.create.‘
避免使用与SS2.x模块相同的变量名称
发布于 2020-10-19 16:56:44
首先,您的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': '' };
}
});
https://stackoverflow.com/questions/64306950
复制相似问题