The CreatorCon Call for Content is officially open! Get started here.

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);