2013-08-19 34 views
3

我第一次尝试Restlets,并且无法返回任何数据。尝试使用NetSuite的Restlet接口时出错:datain为空

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

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

使用铬合金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) 

我也删除customeridrequest URI,而是上市它们位于REST控制台的Request Payload部分。

- 编辑2--

添加nlapiLogExecution('DEBUG', 'JSON.stringify(datain) is:', JSON.stringify(datain));的功能是为日志条目返回的空白。看来,数据输入是空....

回答

-2

改变功能:

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

解决问题。我以为我曾尝试过没有骆驼,但唉,我没有。

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

+0

是否区分大小写“datain”没有任何意义,无论你使用什么参数名称,都会给出请求负载的名称,它将区分大小写,但不一定是特定的名称(例如datain)。只是创建了一个测试脚本,其中我的函数是getRESTlet(testingParam),一切都按预期工作,我的有效载荷被传递到了testingParam的属性中,通过testingparam或任何其他名称访问它给出了一个预期的错误,我甚至没有看看你的最后一个样本是如何工作的,除非NetSuite在幕后定义了它自己的dataIn变量 – erictgrubaugh

+0

在我看来,在你的EDIT 2中你试图记录'datain',但是你的参数名字在这一点上仍然是'dataIn',所以不会有'datain'变量存在。 – erictgrubaugh

+0

所以最后,这个线程没有答案,我有完全相同的问题... –

1

我有一个类似的问题,一旦我将请求头content-type设置为application/json就解决了。

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

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

从NetSuite的文档:

If users specify a content type other than JSON or TEXT, a 415 error is returned with the following message:

Invalid content type. You can only use application/json, application/xml or text/plain with RESTlets.

If users provide data in a format different from specified type, the following error is returned with one of the following messages:

Error code = INVALID_RETURN_DATA_FORMAT Error message = Invalid data format. You should return TEXT. Error message = Invalid data format. You should return a JavaScript object.

+0

注 - RESTlet中的内容类型由客户端请求头“Content-Type”控制,而不是我期待的“Accepts”头,或者通过在响应中设置内容类型来控制。响应的内容类型总是与请求相同,显然。很奇怪。 – mragh

1

要解决的

Error code = INVALID_RETURN_DATA_FORMAT Error message = Invalid data format. You should return TEXT. Error message = Invalid data format. You should return a JavaScript object.

错误你可以提供一个内容类型为 'JSON' 的规定得到get请求。文档似乎表明你应该指定“接受”JSON,但对我而言,只有get上的内容类型才能使请求生效。

0

我得到这个错误:试图提交的变换,我在骆驼的情况下,而所有的小写详细描述了记录类型时SSS_MISSING_REQD_ARGUMENT ......我花了一天的工作说出来:(