这是我的适配器代码
var fetchCommand = WL.Server.createSQLStatement("select * from basis_customers WHERE ID = ?");
function fetchData(param) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://ectest556ws1:9081/teamworks/webservices/POCODM/MobilityWS.tws', true);
// build SOAP request
var sr = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mob="http://POCODM/MobilityWS.tws">'+
'<soapenv:Header/>'+
'<soapenv:Body>'+
'<mob:startProcess>'+
'<mob:nombre>1111</mob:nombre>'+
'<mob:cedula>2222</mob:cedula>'+
'</mob:startProcess>'+
'</soapenv:Body>'+
'</soapenv:Envelope>' ;
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
jq(xmlhttp.responseText).find("startProcessResponse").each(function () {
var el = jq(this);
alert(el.find("outputMessage").text());
});
}
};
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
return WL.Server.invokeSQLStatement({
preparedStatement : fetchCommand,
parameters : [param]
});
}
我的SOAP WS工作得很好,但我不明白如何在我的Worklight适配器上调用XMLHttpRequest
实例。但是当我调用它时,我得到了这个错误:
Procedure invocation error. Ecma Error: ReferenceError: "XMLHttpRequest" is not defined. (C%3A%5CUsers%5Csasahoo%5Cworkspace%5Cback%5Cadapters%5CPerson/Person-impl.js#33) worklight.js:4556
WL.Logger.__log worklight.js:4556
PUBLIC_API.(anonymous function) worklight.js:4643
onInvokeProcedureSuccess worklight.js:7112
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onSuccess worklight.js:3225
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onWlSuccess worklight.js:3197
(anonymous function) worklight.js:947
window.WLJSX.Ajax.Request.WLJSX.Class.create.respondToReadyState worklight.js:1156
window.WLJSX.Ajax.Request.WLJSX.Class.create.onStateChange worklight.js:1094
(anonymous function)
您正在尝试在Worklight Adapater环境中使用浏览器样式的代码,而您需要使用WL。服务器功能。
您将需要两个适配器:SQL适配器和HTTP适配器。你可以从一个呼叫到另一个
SQLAdapter ---> HttpAdapter ---SOAP Reuqest----> Your service
首先启动Http适配器。创建一个HTTP适配器,在其XML文件中指定您的域和端口,即ectest556ws1和9081。在适配器实现文件.js中,使用
var input = {
method : 'get',
returnedContentType : 'xml',
path : "teamworks/webservices/POCODM/MobilityWS.tws",
};
return WL.Server.invokeHttp(input);
注意,这是一个同步调用,您不使用回调方法。您可以使用Studio中的invokeProcedure功能进行测试。
然后在你的数据库适配器你可以调用跨HTTP适配器:
var invocationData = {
adapter : "myHttpAdapter",
procedure : "myCallSoapMethod",
parameters : [ may, be, some, parameters ]
};
var soapResult = WL.Server.invokeProcedure(invocationData);