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

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还是有更好的方法?

bkn*_*hts 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
            }
    });
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)