如何从外部站点发布到NetSuite自定义记录?

时间:2017-11-10 23:43:11

标签: rest xmlhttprequest netsuite restlet suitescript

我试图将一个非常小的自定义Web应用程序与NetSuite集成。我希望每当用户点击我的Web应用程序中的按钮时,就可以在NetSuite中创建自定义记录。

我编写了一个与REST API Testing chrome扩展一起使用的RESTlet。我已通过Chrome扩展程序成功创建了记录。

但是,当我尝试从我的Web应用程序发布POST时,出现此错误:

  

"对预检请求的响应未通过访问控制检查:否   '访问控制允许来源'标题出现在请求的上   资源。起源' null'因此不允许访问。响应   有HTTP状态代码401。"

如何使用外部站点的RESTlet向NetSuite发送邮件?我是应该使用RESTlet还是有更好的方法?

2 个答案:

答案 0 :(得分:5)

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

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功能

function service(request, response){
    ... do some work and generate a response
    var returnObj = {
        success:true,
        message: '',
        result:result
    };

    _sendJSResponse(request, response, returnObj);
}

答案 1 :(得分:0)

这是您的浏览器及其CORS设置

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

然后,在任务管理器中杀死/重启所有chrome的实例并再次尝试您的请求

否则谷歌“在MY_BROWSER上禁用CORS”