Name

global.AssociateCIsToChangeUtil

Description

No description available

Script

var AssociateCIsToChangeUtil = Class.create();
AssociateCIsToChangeUtil.prototype = Object.extendsObject(AbstractAjaxProcessor, {

  SESSION_KEY: 'com.snc.change_request.AssociateCIsToChangeUtil.selected_cis',
  AFFECTED_CI_TABLE: 'task_ci',
  IMPACTED_SERVICE_TABLE: 'task_cmdb_ci_service',

  CMDB_CI: 'cmdb_ci',
  TASK_CI: 'task_ci',
  TASK_CMDB_CI_SERVICE: 'task_cmdb_ci_service',
  TASK_SERVICE_OFFERING: 'task_service_offering',

  // Cannot use: sys_meta[table].sys_meta.plural because: task_ci.xml mtom="Affected CIs" is not available
  TABLE_DISPLAY: {
  	'task_ci': {
  		'label': gs.getMessage('Affected CI'),
  		'plural': gs.getMessage('Affected CIs')
  	},
  	'task_cmdb_ci_service': {
  		'label': gs.getMessage('Impacted Service/CI'),
  		'plural': gs.getMessage('Impacted Services/CIs')
  	},
  	'task_service_offering': {
  		'label': gs.getMessage('Service Offering'),
  		'plural': gs.getMessage('Service Offerings')
  	}
  },

  ajaxFunction_storeCIsAndPostInfoMsg: function() {
  	var cis = this.getParameter('sysparm_selected_cis') + '';
  	if (cis) {
  		cis = cis.trim();
  		gs.getSession().putClientData(this.SESSION_KEY, cis);
  		var ciItemLabel = this.getParameter('sysparm_table_label') + '';
  		if (!ciItemLabel)
  			ciItemLabel = gs.getMessage('Configuration Items');

  		ciItemLabel = SNC.GlideHTMLSanitizer.sanitize(ciItemLabel);
  		gs.addInfoMessage(gs.getMessage('Your selected {0} will be related to this Change Request once saved', [ciItemLabel]));
  		var primaryCiClassData = this._getPrimaryCiClass(cis);
  		return primaryCiClassData ? this.SESSION_KEY + '_' + JSON.stringify(primaryCiClassData) : this.SESSION_KEY;
  	}
  },

  ajaxFunction_addManyRelatedAjax: function() {
  	var taskSysId = this.getParameter('sysparm_task_sys_id') + '';
  	var cis = this.getParameter('sysparm_selected_cis') + '';
  	return new JSON().encode(this.addManyRelated(taskSysId, cis.split(',')));
  },

  _getPrimaryCiClass: function(ciSysIds) {
  	if (!ciSysIds)
  		return null;

  	var ciArray = ciSysIds.split(',').filter(function(elem) { return elem; });
  	if (ciArray.length !== 1)
  		return null;

  	var primaryCiClassData = {};
  	primaryCiClassData.sys_id = ciArray[0];
  	primaryCiClassData.classname = null;
  	var ciGr = new GlideRecordSecure('cmdb_ci');
  	if (ciGr.get(ciArray[0]))
  		primaryCiClassData.classname = ciGr.getValue('sys_class_name');

  	if (primaryCiClassData.classname !== 'service_offering')
  		return primaryCiClassData;

  	var cmdbCiGr = new GlideRecordSecure('service_offering');
  	if (!cmdbCiGr.get(primaryCiClassData.sys_id ))
  		return primaryCiClassData;

  	var parentSysId = cmdbCiGr.getValue('parent');
  	if (!parentSysId)
  		return primaryCiClassData;

  	primaryCiClassData.parent_sys_id = parentSysId;
  	primaryCiClassData.parent_classname = 'business_service';
  	
  	return primaryCiClassData;
  },

  /** DEPRECATED FUNCTIONS and FUNCTIONALITY not used by code, but available if customers called these functions */

  // deprecated function
  _addRelated: function(table, foreignKey, taskSysId, sysId) {
  	var gr = new GlideRecord(table);
  	gr.addQuery('task', taskSysId);
  	gr.addQuery(foreignKey, sysId);
  	gr.query();
  	if (!gr.hasNext()) {
  		gr.initialize();
  		gr.task = taskSysId;
  		gr[foreignKey] = sysId;
  		return (gr.insert());
  	}
  	return false;
  },

  // deprecated function
  addImpactedRelated: function(taskSysId, sysId) {
  	return this._addRelated(this.IMPACTED_SERVICE_TABLE, 'cmdb_ci_service', taskSysId, sysId);
  },

  // deprecated function
  addAffectedRelated: function(taskSysId, sysId) {
  	return this._addRelated(this.AFFECTED_CI_TABLE, 'ci_item', taskSysId, sysId);
  },

  /** END OF DEPRECATED FUNCTIONS and FUNCTIONALITY */

  addManyRelated: function(taskSysId, ciSysIds) {
  	var taskUtils = new TaskUtils();
  	var result = taskUtils.assocCiToTaskByCiClass(taskSysId, ciSysIds);
  	if (!result.validTask)
  		return result;

  	result.addedPrimaryCi = this._addCiToRecordIfEmpty(ciSysIds[ciSysIds.length - 1], result.processedCount, result.taskGr);
  	var taskDisplayValue = result.validTask ? result.taskGr.getDisplayValue() : '';
  	result.messages = this._getMessages(result.serviceOfferingCount, result.impactedServiceCount, result.affectedCICount, taskDisplayValue, taskSysId);

  	// legacy result properties, to support customer customizaiton using these resulting properties
  	result.displayValue = GlideStringUtil.escapeHTML(taskDisplayValue);
  	result.changeId = taskSysId;
  	result.count = result.serviceOfferingCount + result.impactedServiceCount + result.affectedCICount;

  	// remove the taskGr from the returned result
  	delete result.taskGr;

  	return result;
  },

  _addCiToRecordIfEmpty: function(ciSysId, processedCount, taskGr) {
  	if (!ciSysId || processedCount !== 1 || !taskGr || !taskGr.canWrite())
  		return false;

  	var taskUtils = new TaskUtils();
  	var assocByCiClass = taskUtils._getAssocByCiClass(taskGr);
  	if (assocByCiClass) {
  		var ciTaskField = taskUtils.getCiTaskField(ciSysId, taskGr);
  		if (ciTaskField && !taskGr.getValue(ciTaskField)) {
  			taskGr.setValue(ciTaskField, ciSysId);

  			// Service Offerings have a parent Service which should also be populated
  			if (ciTaskField + '' === taskUtils.FIELD.SERVICE_OFFERING) {
  				var cmdbCiGr = new GlideRecord('service_offering');
  				if (cmdbCiGr.get(ciSysId)) {
  					var parentCmdbCi = cmdbCiGr.getValue('parent') + '';
  					if (parentCmdbCi && !taskGr.getValue('business_service'))
  						taskGr.setValue('business_service', parentCmdbCi);
  				}
  			}

  			taskGr.update();
  			return true;
  		}
  	} else if (!taskGr.getValue(this.CMDB_CI)) {
  		taskGr.cmdb_ci = ciSysId;
  		taskGr.update();
  		return true;
  	}

  	return false;
  },

  _getMessages: function(serviceOfferingCount, impactedServiceCount, affectedCICount, taskDisplayValue, taskSysId) {
  	messages = [];

  	if (serviceOfferingCount > 0)
  		messages.push(this._getMessage(this.TASK_SERVICE_OFFERING, serviceOfferingCount, taskSysId, taskDisplayValue));

  	if (impactedServiceCount > 0)
  		messages.push(this._getMessage(this.TASK_CMDB_CI_SERVICE, impactedServiceCount, taskSysId, taskDisplayValue));

  	if (affectedCICount > 0)
  		messages.push(this._getMessage(this.TASK_CI, affectedCICount, taskSysId, taskDisplayValue));

  	return messages;
  },

  _getMessage: function(relatedList, relatedListCount, chgReqSysId, chgReqDisplayValue) {
  	var relatedListDisplayValue = GlideStringUtil.escapeHTML(this._getRelatedListDisplayValue(relatedList, relatedListCount));
  	chgReqSysId = SNC.GlideHTMLSanitizer.sanitize(chgReqSysId);
  	chgReqDisplayValue = GlideStringUtil.escapeHTML(chgReqDisplayValue);

  	var chgReqURL = '';
  	if (chgReqSysId)
  		chgReqURL = 'change_request.do?sys_id=' + chgReqSysId;
  	else
  		chgReqURL = '#';

  	return gs.getMessage('{0} {1} added to Change Request <a href="{2}">{3}</a>', [
  		relatedListCount + '',
  		relatedListDisplayValue,
  		chgReqURL,
  		chgReqDisplayValue
  	]);
  },

  _getRelatedListDisplayValue: function(table, count) {
  	if (!table || !count)
  		return '';

  	return count > 1 ? this.TABLE_DISPLAY[table].plural : this.TABLE_DISPLAY[table].label;
  },

  type: 'AssociateCIsToChangeUtil'
});

Sys ID

da17c390ff473100b18affffffffff7a

Offical Documentation

Official Docs: