Handling the result Object
When you call a Web service, you actually send a message to the service and then receive another message as a response. You send a message via the callService() method. Here is an example for calling a Web service:
iCallID = webServiceCallerBody.echo.callService
(handleResult, "echoString",
"Asynchronous Call");
The response message, or errors encountered during the interaction with the Web service, are attached to an object, called the result object. If you want to find the result of your query to the Web service, you need to analyze the result object. First, you need to know where you can get it for analysis. Well, it depends on how you call the Web service. If you specify an event handler in the callService() method (first parameter), the result object will be passed as a parameter to this event handler. Here is the handleResult() function from the above callService() example:
function handleResult(res) {
if (!res.error) {
alert("Successful call. Result is " + res.value);
}
else {
alert("Unsuccessful call. Error is "
+ res.errorDetail.string);
}
}
The result object includes everything you need in order to analyze what happened to the message you have sent to a Web service. It has the following properties:
error. A Boolean property created by the WebService behavior after using the callService() method. It is true when the call is not successful, and false when it is.
id. A property of the result object that has a unique value which corresponds to a specific execution of the callService() method. Should be identical to the integer returned by the callService() method.
raw. This property exposes the raw Simple Object Access Protocol (SOAP) data packet returned by the Web Service after invoking the callService() method.
value. A property of the result object that is created at runtime. This is the returned value by the specific Web method called by the callService() method. The data type of result.value depends on the data type of the returned value of the Web method that was invoked.
Here is another example that calls the add method with two arguments, intA and intB:
iCallID = service.MyMath.callService(mathResults,"add",
intA, intB);
The event handler mathResults() accepts the result object as its sole parameter:
function mathResults(result)
The name of the parameter can be different than "result". Inside, it checks whether there were errors during the call to the Web service:
if (result.error) { .... }
Use this check to write an event handler that processes the result object and prints the error details (if any) as well as the result value. Here is a Microsoft example:
<SCRIPT language="JavaScript">
<!--
// All these variables must be global,
// because they are used in both init() and onResult().
var iCallID = 0;
var intA = 5;
var intB = 6;
function init() {
service.useService("/services/math.asmx?WSDL","MyMath");
iCallID = service.MyMath.callService(mathResults,
"add", intA, intB);
}
function mathResults(result) {
if(result.error) {
var xfaultcode = result.errorDetail.code;
var xfaultstring = result.errorDetail.string;
var xfaultsoap = result.errorDetail.raw;
} else{
alert(intA + ' + ' + intB + " = " + result.value);
}
}
// -->
</SCRIPT>
<BODY onload="init()">
<DIV ID="service" style="behavior:url(webservice.htc)">
</DIV>
</HTML>
|