Generate XML

Vijayalakshmi P
Kilo Sage

Hi All,

Please share suggestions on how to generate XML(say from incident) via scripts in Servicenow. (XML is defined by external system and the requirement is for system to system handshake).

Thanks,

Vijayalakshmi

10 REPLIES 10

Hitoshi Ozawa
Giga Sage
Giga Sage

Hi Vijayalakshmi,

Write a script include to generate xml in required format.

Need further information such as below:

1. Query condition on incident record to create xml. For example, is it for 1 incident record, several incident records, all incident records.

2. XML format required by the external system.

 

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

are you referring to this from integration point of view?

Can you explain your business requirement?

regards
Ankur

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

Hitoshi Ozawa
Giga Sage
Giga Sage
Vijayalakshmi,
Following script include will generate xml of all records in a specified table.
Script Include. (uncheck "Client callable")
var TableUtil = Class.create();
TableUtil.prototype = {
    initialize: function() {},
    getXMLData: function(tableName) {
        function OBJtoXML(obj) {
            var xml = '';
            for (var prop in obj) {
                xml += obj[prop] instanceof Array ? '' : "<" + prop + ">";
                if (obj[prop] instanceof Array) {
                    for (var array in obj[prop]) {
                        xml += "<" + prop + ">";
                        xml += OBJtoXML(new Object(obj[prop][array]));
                        xml += "</" + prop + ">";
                    }
                } else if (typeof obj[prop] == "object") {
                    xml += OBJtoXML(new Object(obj[prop]));
                } else {
                    xml += obj[prop];
                }
                xml += obj[prop] instanceof Array ? '' : "</" + prop + ">";
            }
            xml = xml.replace(/<\/?[0-9]{1,}>/g, '');
            return xml;
        }

        var gr = new GlideRecord(tableName);
        gr.addActiveQuery();
        // gr.addQuery();  //add additional query as needed
        gr.query();
        var recList = [];
        while (gr.next()) {
            var fields = gr.getFields();
            var rec = {};
            for (var i = 0; i < fields.size(); i++) {
                var v = fields.get(i);
                if (v.toString() != '') {
                    rec[v.getName()] = v.toString();
                }
            }
            recList.push(rec);
        }
        var jsObj = {};
        jsObj[tableName] = {
            "records": recList
        };
        var xmlDoc = eval("OBJtoXML(" + JSON.stringify(jsObj) + ");");
        return xmlDoc;
    },
    type: 'TableUtil'
};

Sample execution:

Background script:

var xmlDoc = new TableUtil().getXMLData('incident');
gs.info(xmlDoc);

Result:

*** Script: <incident><records><sys_updated_on>2015-11-24 15:47:36</sys_updated_on><number>INC0000017</number><state>3</state><sys_created_by>don.goodliffe</sys_created_by><knowledge>false</knowledge><impact>1</impact><active>true</active><priority>1</priority><sys_domain_path>/</sys_domain_path><short_description>How do I create a sub-folder</short_description><notify>1</notify><sys_class_name>incident</sys_class_name><reassignment_count>2</reassignment_count><assigned_to>5137153cc611227c000bbd1bd8cd2005</assigned_to><variables>variable_pool</variables><sla_due>2015-09-02 00:00:00</sla_due><escalation>3</escalation><made_sla>false</made_sla><hold_reason>1</hold_reason><task_effective_number>INC0000017</task_effective_number><sys_updated_by>admin</sys_updated_by><opened_by>9ee1b13dc6112271007f9d0efdb69cd0</opened_by><sys_created_on>2015-08-25 23:41:54</sys_created_on><sys_domain>global</sys_domain><opened_at>2015-08-12 23:41:00</opened_at><caller_id>681ccaf9c0a8016400b98a06818d57c7</caller_id><assignment_group>d625dccec0a8016700a222a0f7900d06</assignment_group><description>I need to organize my inbox in my email program. However I can't create a sub-folder. I didn't seen an option to create a new folder when right clicking.</description><contact_type>phone</contact_type><incident_state>3</incident_state><urgency>1</urgency><company>31bea3d53790200044e0bfc8bcbe5dec</company><activity_due>2015-11-24 17:47:36</activity_due><severity>3</severity><approval>not requested</approval><sys_mod_count>36</sys_mod_count><category>inquiry</category></records><records><upon_reject>cancel</upon_reject><sys_updated_on>2022-03-28 08:11:59</sys_updated_on><number>INC0000052</number><state>2</state><sys_created_by>itil</sys_created_by><knowledge>false</knowledge><impact>1</impact><active>true</active><priority>1</priority><sys_domain_path>/</sys_domain_path><short_description>Dummy form to attach file</short_description><notify>1</notify><sys_class_name>incident</sys_class_name><reassignment_count>0</reassignment_count><assigned_to>5137153cc611227c000bbd1bd8cd2005</assigned_to><variables>variable_pool</variables><sla_due>2020-07-06 12:40:39</sla_due><escalation>0</escalation><upon_approval>proceed</upon_approval><made_sla>true</made_sla><task_effective_number>INC0000052</task_effective_number><sys_updated_by>system</sys_updated_by><opened_by>681b365ec0a80164000fb0b05854a0cd</opened_by><sys_created_on>2020-07-06 20:48:40</sys_created_on><sys_domain>global</sys_domain><opened_at>2020-07-06 20:48:40</opened_at><caller_id>46c6f9efa9fe198101ddf5eed9adf6e7</caller_id><assignment_group>8a4dde73c6112278017a6a4baf547aa7</assignment_group><description>PROD 10 987</description><contact_type>phone</contact_type><incident_state>2</incident_state><urgency>1</urgency><problem_id>d7296d02c0a801670085e737da016e70</problem_id><company>31bea3d53790200044e0bfc8bcbe5dec</company><activity_due>2022-03-28 10:11:58</activity_due><severity>3</severity><approval>not requested</approval><sys_mod_count>1172</sys_mod_count><location>db96a8480a0a0a65019da337d4a89edc</location><category>software</category></records></incident>

Thank you, this is wonderful.. Will help in future.

And sorry I was not clear on stating the requirement. This is from integration point of view. XML is defined by external system. We should populate right values from Incident to this XML.

Thanks,

Vijayalakshmi.