Get value from xml response

Kevin Paul
Mega Guru

How to get the value '104' which is the CelsiusToFahrenheitResult here in this response xml into my business rule scipt?

find_real_file.png

I need to take the value '104' from this xml and place it as the value of a field.

Here is my code,

(function executeRule(current, previous /*null when async*/ ) {


var type = current.u_conversion_type;
var temp = current.u_temperature;
if (type == 'fahrenheit') {
var s = new sn_ws.SOAPMessageV2('Temperature Convert', 'TempConvertSoap.CelsiusToFahrenheit');

s.setStringParameterNoEscape('CelsiusToFahrenheit.Celsius', temp);
var response = s.execute();
var responseBody = response.getBody();
var status = response.getStatusCode();
current.u_converted_temperature = response;

}
if (type == 'celcius') {
var s1 = new sn_ws.SOAPMessageV2('Temperature Convert', 'TempConvertSoap.FahrenheitToCelsius');

s1.setStringParameterNoEscape('FahrenheitToCelsius.Fahrenheit', temp);
var response1 = s1.execute();
var responseBody1 = response1.getBody();
var status1 = response1.getStatusCode();
current.u_converted_temperature = response1;
}
})(current, previous);

1 ACCEPTED SOLUTION

Hitoshi Ozawa
Giga Sage
Giga Sage

Here is the complete code. I've used XMLDocument2 to support scoped applications.

https://developer.servicenow.com/dev.do#!/reference/api/orlando/server/no-namespace/c_XMLDocument2ScopedAPI

(function executeRule(current, previous /*null when async*/ ) {
    var type = current.u_conversion_type;
    var temp = current.u_temperature;
    if (type == 'fahrenheit') {
        var s = new sn_ws.SOAPMessageV2('Temperature Convert', 'TempConvertSoap.CelsiusToFahrenheit');

        s.setStringParameterNoEscape('CelsiusToFahrenheit.Celsius', temp);
        var response = s.execute();
        var status = response.getStatusCode();
        if (status != 200) {
			current.u_converted_temperature = 0; // set to error value
            // error throw exception
        } else {
            var responseBody = response.getBody();
            var xmlDoc = new XMLDocument2();
            xmlDoc.parseXML(responseBody);
            current.u_converted_temperature = xmlDoc.getNodeText("//CelsiusToFahrenheitResult");
        }
    }
    if (type == 'celcius') {
        var s1 = new sn_ws.SOAPMessageV2('Temperature Convert', 'TempConvertSoap.FahrenheitToCelsius');

        s1.setStringParameterNoEscape('FahrenheitToCelsius.Fahrenheit', temp);
        var response1 = s1.execute();
        var status1 = response1.getStatusCode();
        if (status != 200) {
			current.u_converted_temperature = 0; // set to error value
            // error throw exception
        } else {
            var responseBody1 = response1.getBody();
            var xmlDoc1 = new XMLDocument2();
            xmlDoc1.parseXML(responseBody1);
            current.u_converted_temperature = xmlDoc1.getNodeText("//CelsiusToFahrenheitResult");
        }
    }
})(current, previous);

View solution in original post

7 REPLIES 7

Hitoshi Ozawa
Giga Sage
Giga Sage

You have a typo. "celcius" should "celsius"? Is this intentional?

if (type == 'celcius') {

To avoid this kind of error, it would be better to just have if-else block rather than 2 if block.

yes intentional

@Kevin Paul 

Hope you are doing good.

Did you get a chance to check on the solution provided to resolve your query?

If it helped, please mark appropriate answer as correct & helpful to close the thread.

If not, please let us know if you need some more assistance.

Regards
Ankur

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hitoshi Ozawa
Giga Sage
Giga Sage

Following to parse soap message to get "104".

var xmlDoc = new XMLDocument2();
xmlDoc.parseXML(responseBody1);

var result = xmlDoc.getNodeText("//CelsiusToFahrenheitResult");
gs.info(result);