netsuite 库存同步机制-CarlZeng
应用调用:nlapiServerCall(‘/app/accounting/transactions/inventory/validateInventoryNumbers.nl’, ‘getValidationScript’, [params], eval);实现过程:——————— * @param url URL of request handler * @par…
应用调用:
nlapiServerCall(‘/app/accounting/transactions/inventory/validateInventoryNumbers.nl’, ‘getValidationScript’, [params], eval);
实现过程:———————   
* @param url URL of request handler    
* @param methodName method name on remote object to call    
* @param methodParams an array of parameters to the method    
* @param asyncCallback a callback if this is to be an async request. Callback signature should be: callback(result, error)    
*/    
function nlapiServerCall(url, methodName, methodParams, asyncCallback)    
{    
return nsServerCall(url, methodName, methodParams, asyncCallback);    
}    
    
function nlapiLocalCall(func, timeoutinmillis)    
{    
nsapiAssertTrue(timeoutinmillis != null && !isNaN(parseInt(timeoutinmillis)), ‘SSS_INVALID_ARGUMENT’, ‘timeoutinmillis: ‘+timeoutinmillis)    
var obj = new Object()    
obj.trigger = nsapiQueryScript(“trigger”)    
obj.scriptid = nsapiQueryScript(“scriptid”)    
if ( timeoutinmillis == -1 )    
return nsapiCallScript(obj.trigger, obj.scriptid, func)    
return setTimeout( function() { nsapiCallScript(obj.trigger, obj.scriptid, func); }, timeoutinmillis );    
}    
-—————————————  
/**
 * @param url URL of request handler
 * @param methodName method name on remote object to call
 * @param methodParams an array of parameters to the method
 * @param asyncCallback a callback if this is to be an async request.  Callback signature should be: callback(result, error)
 */
function nsServerCall(url, methodName, methodParams, asyncCallback)
{
    var client = new NLJsonRpcClient(url);
    return client.sendRequest(methodName, methodParams, asyncCallback);
}  
NLJsonRpcClient = function (serverURL)
{
    if (serverURL.indexOf(“?”) > 0)
        serverURL = serverURL + “&jrpc=T”;
    else
        serverURL = serverURL + “?jrpc=T”;
    this.serverURL = serverURL;
    this.responseCallbackMap = {};
};
NLJsonRpcClient.requestId = 0;
NLJsonRpcClient.prototype =
{
    sendRequest : function (methodName, args, callback)
    {
        var jsonRpcReq = {
            id : NLJsonRpcClient.requestId++,
            method : “remoteObject.” + methodName,
            params : args || []
        };
        if (callback != null)
            this.responseCallbackMap[jsonRpcReq.id] = callback;
        var request = new NLXMLHttpRequest();
        if (callback != null)
            request.setResponseHandler(this.handleResponseAsync.bindAsEventListener(this));
        var response = request.requestURL(this.serverURL, toJSON(jsonRpcReq), null, callback != null ? true : false);
        if (callback == null)
        {
            var jsonRpcResp = this.getJsonRpcResponse(response);
            if (jsonRpcResp.error)
                throw new NLXMLResponseError(jsonRpcResp.error.code, jsonRpcResp.error.trace, jsonRpcResp.error.msg);
            response = jsonRpcResp.result;
        }
        return response;
    },  
getJsonRpcResponse : function (nlXMLResponseObj)  
{  
    var jsonRpcResp = nlXMLResponseObj.getBody();  
    if (jsonRpcResp != null)  
        jsonRpcResp = jsonRpcResp.replace(/^\\s\*<!--\[\\s\\S\]\*?-->\\s\*$/gm, '');  
    eval("jsonRpcResp = " + jsonRpcResp + ";");  
    return jsonRpcResp;  
},  
handleResponseAsync : function (nlXMLResponseObj)  
{  
    var jsonRpcResp = this.getJsonRpcResponse(nlXMLResponseObj);  
    var callback = this.responseCallbackMap\[jsonRpcResp.id\];  
    this.responseCallbackMap\[jsonRpcResp.id\] = null;  
    callback(jsonRpcResp.result, jsonRpcResp.error);  
}  
}
function toJSON(o)
{
    if (o == null)
        return “null”;
    else if(o.constructor == String || o.constructor.name == “String”)
        return escapeJSONString(o);
    else if(o.constructor == Number || o.constructor.name == “Number”)
        return o.toString();
    else if(o.constructor == Boolean || o.constructor.name == “Boolean”)
        return o.toString();
    else if(o.constructor == Date || o.constructor.name == “Date”)
        return ‘{javaClass: “java.util.Date”, time: ‘ + o.valueOf() +’}’;
    else if((o.constructor == Array || o.constructor.name == “Array”))
    {
        var v = [];
        for (var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
        return “[“ + v.join(“, “) + “]“;
    }
    else
    {
        var v = [];
        for(attr in o)
        {
            if(o[attr] == null) v.push(“\“” + attr + “\“: null”);
            else if(typeof o[attr] == “function”); /* skip */
            else v.push(escapeJSONString(attr) + “: “ + toJSON(o[attr]));
        }
        return “{“ + v.join(“, “) + “}”;
    }
}