【发布时间】: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