Name

global.ChangeManagementEventHandlerSNC

Description

Base Change Association API. Use the ChangeManagementEventHandlerSNC script include to override functionality in this script if required

Script

var ChangeManagementEventHandlerSNC = Class.create();

ChangeManagementEventHandlerSNC.AFFECTED_CREATE = "sn_chg_mgt.affected.CREATE";
ChangeManagementEventHandlerSNC.IMPACTED_CREATE = "sn_chg_mgt.impacted.CREATE";
ChangeManagementEventHandlerSNC.OFFERING_CREATE = "sn_chg_mgt.offering.CREATE";
ChangeManagementEventHandlerSNC.IMPACTED_SERVICES_REFRESH = "sn_chg_mgt.impacted.REFRESH";
ChangeManagementEventHandlerSNC.AVALABLE_SPANS_GET = "sn_chg_mgt.schedule.GET";
ChangeManagementEventHandlerSNC.AVALABLE_SPANS_UPDATE = "sn_chg_mgt.schedule.UPDATE";

ChangeManagementEventHandlerSNC.prototype = {

  initialize: function(chgMgtWorkerGr) {
  	this._log = new GSLog(ChangeCommon.LOG_PROPERTY, this.type);
  	if (chgMgtWorkerGr)
  		this._chgMgtWorker = new global.ChangeManagementWorker(chgMgtWorkerGr);
  },

  /**
  * Handle chgMgt events e.g. sn_chg_mgt.affected.CREATE
  *
  * event.name sn_chg_mgt.<association_type>.<operation>
  * event.parm1 - chg_mgt_worker.sys_id
  * event.parm2 - chg_mgt_worker.request
  */
  process: function(event) {
  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[process] event: " + JSON.stringify(event));


  	var chgMgtWorkerSysId = event.parm1;
  	if (!this._chgMgtWorker && chgMgtWorkerSysId)
  		this.setChgMgtWorker(chgMgtWorkerSysId);

  	if (!this._chgMgtWorker)
  		return;

  	if (!this._chgMgtWorker.isWaiting())
  		return;

  	this._chgMgtWorker.inProgress();

  	var nameValuePairs = JSON.parse(event.parm2);
  	var eventName = event.name + "";
  	var hasDataEnforcement = gs.getProperty(ChangeRequestSNC.ENFORCE_DATA_REQ_PROP) === "true";

  	// To collect interactive messages isInteractive based on property
  	GlideSession.get().setInteractive(hasDataEnforcement);

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[process] hasDataEnforcement: " + hasDataEnforcement + " isInteractiveSession: " + gs.isInteractiveSession());

  	// All functions here should hand off to their own Script Include
  	switch(eventName) {
  		// Always run complete UNLESS you wish to run secondary async process (and handle your own complete)
  		case ChangeManagementEventHandler.AFFECTED_CREATE:
  			var affectedCIAssociationManager = new global.ChangeCIAssociationManager(nameValuePairs.task + "", this._chgMgtWorker);
  			affectedCIAssociationManager.create(nameValuePairs.cmdb_ci_sys_ids, global.ChangeCIAssociation.AFFECTED, nameValuePairs);
  			if ((nameValuePairs.refresh_impacted_services + "").toLowerCase() === "true")
  				affectedCIAssociationManager.refreshImpactedServices();
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementEventHandler.IMPACTED_CREATE:
  			var impactedCIAssociationManager = new global.ChangeCIAssociationManager(nameValuePairs.task + "", this._chgMgtWorker);
  			impactedCIAssociationManager.create(nameValuePairs.cmdb_ci_sys_ids, ChangeCIAssociation.IMPACTED, nameValuePairs);
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementEventHandler.OFFERING_CREATE:
  			var offeringAssociationManager = new global.ChangeCIAssociationManager(nameValuePairs.task + "", this._chgMgtWorker);
  			offeringAssociationManager.create(nameValuePairs.cmdb_ci_sys_ids, ChangeCIAssociation.OFFERING, nameValuePairs);
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementEventHandler.IMPACTED_SERVICES_REFRESH:
  			new global.ChangeCIAssociationManager(nameValuePairs.task + "", this._chgMgtWorker).refreshImpactedServices();
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementEventHandlerSNC.AVALABLE_SPANS_GET:
  			new global.ChangeScheduleRESTUtil(this._chgMgtWorker).getSpans(nameValuePairs);
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementEventHandlerSNC.AVALABLE_SPANS_UPDATE:
  			new global.ChangeScheduleRESTUtil(this._chgMgtWorker).updateChangeScheduleTime(nameValuePairs);
  			this._collectMsgType("error");
  			this._collectMsgType("info");
  			this._chgMgtWorker.complete();
  			break;
  		case ChangeManagementWorker.DELETE:
  			// code block
  			this._chgMgtWorker.complete();
  			break;
  		default:
  			this._chgMgtWorker.addErrorMsg(gs.getMessage("No event handler logic found for event: {0}", [eventName]));
  			this._chgMgtWorker.complete();
  	}
  },

  setChgMgtWorker: ChangeManagementWorkerSNC.methods.setChgMgtWorker,

  getChgMgtWorker: ChangeManagementWorkerSNC.methods.getChgMgtWorker,

  _collectMsgType: function(type) {
  	type = type + "";
  	var msg = "";
  	var msgs;

  	if (this._log.atLevel(GSLog.DEBUG))
  		this._log.debug("[_collectMsgType] type: " + type + " isInteractiveSession: " + gs.isInteractiveSession());

  	if (type === "error")
  		msgs = gs.getErrorMessages();
  	else if (type === "info")
  		msgs = gs.getInfoMessages();
  	else
  		return;

  	var hasMgs = msgs && typeof msgs.size === "function" ? msgs.size() > 0 : msgs.length > 0;
  	if (hasMgs && type === "error") {
  		msg += " " + msgs;

  		if (this.getChgMgtWorker())
  			this.getChgMgtWorker().addErrorMsg(msg);
  	} else if (hasMgs && type === "info") {
  		this._log.info("[_collectMsgType] infMessage: " + msg);

  		if (this.getChgMgtWorker())
  			this.getChgMgtWorker().addInfoMsg(msg);
  	} else
  		return;
  },

  type: "ChangeManagementEventHandlerSNC"
};

Sys ID

84aa4d87b70323000999e4f6ee11a9c4

Offical Documentation

Official Docs: