1

我正在尝试将 post 方法用于一个简单的套件脚本程序,我对此很陌生。

在 Netsuite 中,我编写了一个套件脚本,如下所示。

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);

}

我创建了一个脚本记录并上传了这个套件脚本,甚至复制了外部 URL 以将其粘贴到 restclient。

在Restclient(firefox插件)中,粘贴外部URL,我将方法作为post,标题授权给定,内容类型:application / json,并在正文中输入{"memo":"mynamehere"};

在这个我得到的错误是

message": "missing ) 在参数列表之后

我什至通过编写其他套件脚本程序来尝试它,我得到的错误如下:

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

我对编程世界有点陌生,所以任何帮助都会非常好。

4

4 回答 4

1

我可以理解您的要求,Parsun & NetSuite-Expert 发布的答案很好。您可以遵循该代码。这是一个通用代码,可以接受任何没有子记录的主记录。例如没有联系人或地址簿的客户。

我想建议对代码进行一些小的更改,并且我已经在我的解决方案中给出了它。

下面的变化

var isExistRec = isExistingRecord(objDataIn);
            var record = (isExistRec) ? nlapiLoadRecord(objDataIn.recordtype, objDataIn.internalid, {
                recordmode: 'dynamic'
            }) : nlapiCreateRecord(objDataIn.recordtype);

//检查记录是否存在于 Netsuite 中或未使用自定义函数

function isExistingRecord(objDataIn) {
        if (objDataIn.internalid != null && objDataIn.internalid != '' && objDataIn.internalid.trim().length > 0)
            return true;
        else
            return false;
    }    

因此,每当您将 JSON 数据传递给 RESTlet 时,请记住您必须将 internalid、recordtype 作为强制值传递。

谢谢弗雷德里克
_

于 2016-02-25T10:18:37.477 回答
1

我认为您正在尝试为 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"};
于 2016-02-25T01:50:55.367 回答
0

欢迎使用 Netsuite Suitescripting @Vin :)

我强烈建议通过SuiteScript API Overview&SuiteScript API - Alphabetized Index在 NS 帮助中心,这是学习 Suitescripting 基础知识的唯一也是最明显的地方。

nlapiLoadRecord(类型,id,initializeValues)

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

     function restPost(dataIn) {   
          var record = nlapiLoadRecord('department', 115); // returns nlobjRecord
          record.setFieldValue('custrecord225', dataIn.memo); //  set the value in custom field
          var recordId = nlapiSubmitRecord(record);
          return recordId;
        }
于 2016-02-25T04:45:31.697 回答
0

我相信你会想要return从你的功能中得到一些东西。一个空对象应该可以正常工作,或者类似{success : true}.

于 2016-02-25T01:46:17.830 回答