Posted in: ServiceNow, To Remember

Built in processor for display values

Looking into a problem I have found that SN uses a special processor to get display values for items selected in a List. Maybe I’ll need it sometimes in the future, so I’ll just repeat it here:

var aj = new GlideAjax('ElementGlideListAjax');

aj.addParam('sysparm_type', 'getDisplayValues');
aj.addParam('sysparm_value', '<source table name>,<list of sys_ids>');

aj.getXML(_glideListGetDisplayValuesDone);

function _glideListGetDisplayValuesDone (response, args) {
	
	if (!response || !response.responseXML) {
		return;
	}

	var references = response.responseXML.getElementsByTagName('reference');

	for (var i = 0; i < references.length; i++) {
		var displayValue =
            getNamedItemValue(references[i], 'display');
		var referenceValue =
            getNamedItemValue(references[i], 'sys_id');

		console.log(referenceValue + ': ' + displayValue);
	}
}

function getNamedItemValue (referenceNode, itemName) {

	return referenceNode
		.attributes
		.getNamedItem(itemName).nodeValue;
}

Somewhat related – maybe it will be of help later, whenever a display value is retrieved an event is issued:

'element_mapping:glide_list_add'

and the event parameter is an object like below:

{
  id: "<table>.<element>",
  value: "<sys_id>",
  displayValue: "<display value>"
}