The*_*ver 0 rest xmlhttprequest restlet netsuite suitescript
我正在尝试将一个非常小的自定义Web应用程序与NetSuite集成.我希望每当用户点击我的Web应用程序中的按钮时,就可以在NetSuite中创建自定义记录.
我编写了一个与REST API Testing chrome扩展一起使用的RESTlet.我已通过Chrome扩展程序成功创建了记录.
但是,当我尝试从我的Web应用程序POST时,我收到此错误:
"对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头.因此不允许原点'null'访问.响应具有HTTP状态代码401."
如何使用外部站点的RESTlet向NetSuite发送邮件?我是应该使用RESTlet还是有更好的方法?
RESTlet更像是系统到系统技术.它们需要身份验证,如果您从公共应用程序执行此操作,您的凭据将受到损害.
Netsuite不允许您设置CORS标头,因此您的跨域集成需要通过公共可用的suitelet和JSONP进行.
由于JSONP使用get请求,因此您需要确保您的url参数最终少于2k个字符.这不是标准限制所以ymmv
我经常使用的模式:客户端代码:
var url = "public suitelet url from deployment screen";
var params = {
mode: 'neworder',
//simple name/value data
};
$.ajax({
url: url+"&"+ $.param(params) +"&jsoncallback=?",
cache:false,
dataType:'json',
success: function(jResp){
if(!jResp.success){
if(jResp.message) alert(jResp.message);
return;
}
// act on the results
}
});
Run Code Online (Sandbox Code Playgroud)
suitelet源文件中的库函数.
function _sendJSResponse(request, response, respObject){
response.setContentType('JAVASCRIPT');
//response.setHeader('Access-Control-Allow-Origin', '*');
var callbackFcn = request.getParameter("jsoncallback") || request.getParameter('callback');
if(callbackFcn){
response.writeLine( callbackFcn + "(" + JSON.stringify(respObject) + ");");
}else response.writeLine( JSON.stringify(respObject) );
}
Run Code Online (Sandbox Code Playgroud)
然后是Suitelet功能
function service(request, response){
... do some work and generate a response
var returnObj = {
success:true,
message: '',
result:result
};
_sendJSResponse(request, response, returnObj);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |