2017-11-10 249 views
0

我正在尝试将一个非常小的自定义Web应用程序与NetSuite集成。我想在用户点击我的Web应用程序中的按钮时在NetSuite中创建一个自定义记录。如何从外部网站发布到NetSuite自定义记录?

我已经编写了一个RESTlet,可以与REST API测试Chrome扩展一起使用。我已通过该Chrome扩展成功创建了记录。

然而,当我尝试从我的web应用程序的帖子,我得到这个错误:

"Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 401."

我如何可以张贴到NetSuite的一个的Restlet从外部站点?我甚至应该使用RESTlet还是有更好的方法?

+0

这就是你的浏览器及其CORS设定 如果使用铬(你应该;)在Windows上),创建快捷方式具有以下标志 – Coldstar

回答

3

RESTlets更意味着作为一个系统,系统TECHN易学。他们需要身份验证,如果您是从公共应用程序执行此操作,您的凭据将会被泄露。

Netsuite不允许您设置CORS标头,因此您的跨域集成需要通过公开的suitelet和JSONP。

由于JSONP使用get请求,所以您需要确保您的url参数最终少于2k个字符。这不是一个标准的限制,以便因人而异

模式我经常使用: 客户端代码:

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 
      } 
    }); 

的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)); 
} 

然后Suitelet功能

​​
+0

好的,但是如何使用外部可用的Suitelet创建自定义记录? API不是有限的吗?我在这个列表中看不到nlapiCreateRecord:请参阅SuiteAnswers文章10354 –

+0

我已经完成了所有可用于外部可用Suitelets的任务。你可以做任何服务器端的事情,可以在你的1000单位治理限制内完成。 为suitelet Administrator创建角色。 – bknights

+0

真棒,工作!谢谢。 –

0

这就是你的浏览器及其CORS设定

如果使用铬(你应该;))在Windows上,创建Chrome快捷方式具有以下标志 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir

然后,杀/重新启动的所有实例铬在任务管理器,然后重新尝试请求

否则谷歌“上MY_BROWSER禁用CORS”

+0

那没不为我工作。 –

相关问题