Generate XML
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-28-2022 12:34 AM
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
- Labels:
-
Scripting and Coding

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-28-2022 12:46 AM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-28-2022 12:54 AM
Hi,
are you referring to this from integration point of view?
Can you explain your business requirement?
regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-28-2022 02:05 AM
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>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-30-2022 04:30 AM
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.