3

我是第一次尝试 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)

我还从REST 控制台部分中customer删除了它们,而是将它们列出来。idrequest URIRequest Payload

--编辑2--

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

4

4 回答 4

1

将请求标头内容类型设置为 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 对象。

于 2015-06-09T20:01:32.530 回答
1

修复错误

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

您可以为“json”的获取指定获取请求提供内容类型。文档似乎表明您应该指定“接受”json,但对我来说,只有 get 上的内容类型才能使请求工作。

于 2016-02-19T07:24:22.013 回答
0

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

于 2017-04-24T22:52:08.603 回答
-2

将功能更改为:

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

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

所以这个故事的寓意是:datain 区分大小写!

于 2013-08-19T20:10:58.460 回答