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*$/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(", ") + "}";
}
}