我第一次尝试使用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
中删除了id
和request URI
,并将其列在REST控制台的Request Payload
部分中。
- 编辑2 -
向函数添加nlapiLogExecution('DEBUG', 'JSON.stringify(datain) is:', JSON.stringify(datain));
为日志条目返回空白。似乎datain为null ....
答案 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区分大小写!