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

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

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


使用Chrome的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,[email protected],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 Console的Request Payload部分中列出了它们。

-编辑2--

nlapiLogExecution('DEBUG', 'JSON.stringify(datain) is:', JSON.stringify(datain));添加到该函数将为日志条目返回空白。看来datain为null ....

最佳答案

将请求标头的内容类型设置为application / json后,我也解决了类似的问题。

默认的内容类型是text / plain,它将一个字符串化的JSON对象传递给该函数,并期望返回一个字符串。

如果将内容类型设置为application / json或application / xml,则“ datain”参数将作为javascript对象进入。

从NetSuite文档中:


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

无效的内容类型。您可以
仅将application / json,application / xml或text / plain与
RESTlet。

如果用户以与指定格式不同的格式提供数据
类型,则返回以下错误之一
讯息:

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

关于reSTLet - 尝试NetSuite的ReSTLet接口(interface)时出错:datain为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18321065/

10-13 06:13