无法弄清楚如何使用post方法来处理用Netsuite编写的suitescript

无法弄清楚如何使用post方法来处理用Netsuite编写的suitescript,post,netsuite,suitescript,Post,Netsuite,Suitescript,我正在尝试使用post方法编写一个简单的suitescript程序,对此我很陌生 在Netsuite中,我写了一个suitescript,如下所示 function restPost() { var i = nlapiLoadRecord('department', 115); var memo = nlapisetfieldvalue('custrecord225', ' ');// this is a customfield, which i want to

我正在尝试使用post方法编写一个简单的suitescript程序,对此我很陌生

在Netsuite中,我写了一个suitescript,如下所示

function restPost()
 {   
     var i = nlapiLoadRecord('department', 115); 

     var memo = nlapisetfieldvalue('custrecord225', ' ');// this is a customfield, which i want to populate the memo field, using rest client in firefox

     var recordId = nlapiSubmitRecord(i);

}
我已经创建了一个脚本记录并上传了这个suitescript,甚至复制了外部URL将其粘贴到restclient中

在Restclient(firefox插件)中,粘贴了外部URL,我给出了post方法,给出了头授权,内容类型:application/json,在body中我放入了
{“memo”:“mynamehere”}

在这种情况下,我得到的错误是

参数列表后的消息“:“缺失”

我甚至通过编写其他suitescript程序进行了尝试。我得到的错误如下:

对象文本(null$lib#3)空JSON字符串中存在意外标记 无效的数据格式。您应该返回文本


我是编程界的新手,所以任何帮助都会非常好。

我相信您会希望
从函数中返回一些东西。空对象应该可以,或者类似于
{success:true}

我认为您正在尝试为POST方法创建一个RESTlet。以下是POST方法的示例代码-

function createRecord(datain)
{
var err = new Object();

// Validate if mandatory record type is set in the request
if (!datain.recordtype)
{
    err.status = "failed";
    err.message= "missing recordtype";
    return err;
}

var record = nlapiCreateRecord(datain.recordtype);

for (var fieldname in datain)
{
 if (datain.hasOwnProperty(fieldname))
 {
     if (fieldname != 'recordtype' && fieldname != 'id')
     {
         var value = datain[fieldname];
         if (value && typeof value != 'object') // ignore other type of parameters
         {
             record.setFieldValue(fieldname, value);
         }
     }
 }
}
var recordId = nlapiSubmitRecord(record);
nlapiLogExecution('DEBUG','id='+recordId);

var nlobj = nlapiLoadRecord(datain.recordtype,recordId);
return nlobj;
}
因此,在部署此RESTlet后,您可以通过传递以下示例JSON负载来调用此POST方法-

{"recordtype":"customer","entityid":"John Doe","companyname":"ABCTools Inc","subsidiary":"1","email":"jdoe@email.com"}
对于授权,您必须按如下方式传递请求标头-

var headers = {
           "Authorization": "NLAuth nlauth_account=" + cred.account + ", nlauth_email=" + cred.email + 
                            ", nlauth_signature= " + cred.password + ", nlauth_role=" + cred.role,
           "Content-Type": "application/json"};

欢迎使用Netsuite Suitescripting@Vin:)

我强烈建议您在NS帮助中心浏览
SuiteScriptAPI概述
&
SuiteScriptAPI-字母索引
,这是学习Suitescripting基础知识的唯一和最明显的地方

nlapiLoadRecord(类型、id、初始化值)

从系统加载现有记录并返回包含该记录的所有字段数据的
nlobjRecord
对象。然后,您可以使用返回的记录对象上可用的方法从加载的记录中提取所需的信息。这个API是一个核心API。它在客户端和服务器上下文中都可用


我能理解你的要求,Parsun&NetSuite专家发布的答案很好。你可以遵循这个准则。这是一个通用代码,可以接受没有子记录的任何主记录。例如,没有联系人或通讯簿的客户

我想建议对代码进行一个小的修改,我已经在我的解决方案中给出了它

以下更改

var isExistRec = isExistingRecord(objDataIn);
            var record = (isExistRec) ? nlapiLoadRecord(objDataIn.recordtype, objDataIn.internalid, {
                recordmode: 'dynamic'
            }) : nlapiCreateRecord(objDataIn.recordtype);
//检查Netsuite中是否存在记录或未使用自定义函数

因此,无论何时将JSON数据传递给REStlet,请记住 要传递internalid,请将recordtype作为强制值

谢谢

Frederick

您的方法
restPost
没有任何参数。看看你是否错过了它们。您通常需要对请求对象及其包含的数据进行一些引用。我已经修改了代码并输入了一个参数(datain)
函数restPost(datain){var I=nlapioadrecord('department',115);var memo=nlapisetfieldvalue('custrecord225','');var recordId=nlapisomitRecord(I);}
我现在得到的错误是SyntaxError:应在char 21处结束流。这不处理作为json obj传递的addressbook。您建议对处理阵列/对象进行哪些更改?
var isExistRec = isExistingRecord(objDataIn);
            var record = (isExistRec) ? nlapiLoadRecord(objDataIn.recordtype, objDataIn.internalid, {
                recordmode: 'dynamic'
            }) : nlapiCreateRecord(objDataIn.recordtype);
function isExistingRecord(objDataIn) {
        if (objDataIn.internalid != null && objDataIn.internalid != '' && objDataIn.internalid.trim().length > 0)
            return true;
        else
            return false;
    }