尝试NetSuite的Restlet接口时出错:datain为null

时间:2013-08-19 18:56:52

标签: restlet netsuite

我第一次尝试使用Restlets,但是我无法返回任何数据。

我已经构建了一个基本的restlet并将其部署在NetSuite中。代码如下:

function getRESTlet(dataIn) {   
     return nlapiLoadRecord(dataIn.recordtype, dataIn.id); // e.g recordtype="customer", id="769"
}

使用Chromes的REST控制台应用程序我已经设置了以下内容:

Request URI: https://rest.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1&recordtype=customer&id=2409
Request Headers: NLAuth nlauth_account=123456,nlauth_email=email@emailaddy.com,nlauth_signature=password

将其作为GET操作运行我返回以下错误:

error code: JS_EXCEPTION
error message:type

接下来是以下电子邮件:

Date & Time: 8/19/2013 2:48 pm
Execution Time: 0.06s
Script Usage: 0
Script: getRecord
Type: RESTlet
Function: getRESTlet
Error: SSS_MISSING_REQD_ARGUMENT
type
Stack Trace: getRESTlet(getCustomer.js:14)
restletwrapper(null$lib:3)

客户记录存在,RestLet代码来自NetSuite帮助系统,当脚本失败时我收到错误电子邮件,因此我知道部署URL很好。

关于我做错的任何想法?

- 编辑 -

将我的函数签名更改为function getRESTlet(type,dataIn)可以解决类型错误,但现在我得到了:

error code: UNEXPECTED_ERROR
error message:TypeError: Cannot read property "recordtype" from undefined (getCustomer.js#14)

我还从customer中删除了idrequest URI,并将其列在REST控制台的Request Payload部分中。

- 编辑2 -

向函数添加nlapiLogExecution('DEBUG', 'JSON.stringify(datain) is:', JSON.stringify(datain));为日志条目返回空白。似乎datain为null ....

4 个答案:

答案 0 :(得分:1)

我有一个类似的问题,一旦我将请求标头内容类型设置为application / json就解决了。

默认的content-type是text / plain,它将字符串化的JSON对象传递给函数,并期望返回一个字符串。

如果您将content-type设置为application / json或application / xml,那么' datain'参数将作为javascript对象进入。

来自NetSuite文档:

  

如果用户指定的内容类型不是JSON或TEXT,则会出现415错误   将返回以下消息:

     

内容类型无效。您可以   只使用application / json,application / xml或text / plain   RESTlets。

     

如果用户提供的格式与指定的格式不同   键入,以下错误之一返回以下错误   消息:

     

错误代码= INVALID_RETURN_DATA_FORMAT错误消息=   数据格式无效。你应该返回TEXT。错误消息=无效   数据格式。你应该返回一个JavaScript对象。

答案 1 :(得分:1)

修正

的错误
  

错误代码= INVALID_RETURN_DATA_FORMAT错误消息=   数据格式无效。你应该返回TEXT。错误消息=无效   数据格式。你应该返回一个JavaScript对象。

您可以为获得指定的' json'的get请求提供Content-type。文档似乎表明您应该指定"接受" json,但对我来说,只有get上的内容类型才能使请求有效。

答案 2 :(得分:0)

我收到此错误:SSS_MISSING_REQD_ARGUMENT在尝试提交我在camel案例中指定的转换记录类型而不是所有小写时...我花了一天时间来解决这个问题:(

答案 3 :(得分:-2)

将功能更改为:

function getRESTlet(datain) {   
     return nlapiLoadRecord(datain.recordtype, datain.id); // e.g recordtype="customer", id="769"
}

解决了这个问题。我以为我曾尝试过没有camelCase,但唉,我没有。

故事的寓意是: datain区分大小写!