Name

sn_service_builder.ASBVerifyDraftUtilSNC

Description

No description available

Script

var ASBVerifyDraftUtilSNC = Class.create();
ASBVerifyDraftUtilSNC.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
  verifyDraft: function(){
  	var table = this.getParameter('sysparm_table');
  	var sysId = this.getParameter('sysparm_sysId');
  	var columns = JSON.parse(this.getParameter('sysparm_column_value'));

  	var draftGr = new GlideRecord(table);
  	draftGr.get(sysId);
  	var errorMessages = [];
  	for (var column in columns){
  		var testResult = "";
  		switch (column) {
  			case 'service_status':
  				testResult = this._verifyServiceLifeCycleContraint(draftGr, columns[column]);
  				if (table == 'service_offering') 
  					testResult = this._verifyParentOperationalStatus(draftGr,columns[column], columns['parent']);
  				break;
  			case 'portfolio_status':
  				testResult = this._verifyOfferingCatalogPhaseCheck(draftGr, columns[column]);
  				break;
  		}
  		if (testResult)
  			errorMessages.push({'column': column, 'message': testResult});
  	}
  		return JSON.stringify(errorMessages);

  },
  // Check service name uniqueness: b4ed4500c37331003e76741e81d3aeb0
  _verifyServiceNameUniqueness: function(draftGr, name){
  	var constants = new global.SPMFoundationConstants();
  	var serviceGr = new GlideRecord('cmdb_ci_service');
  	serviceGr.addQuery('name', name);
  	serviceGr.addQuery('state', '').addOrCondition('state', 'published');
  	serviceGr.addQuery('sys_id', '!=', draftGr.sys_id);
  	
  	if (draftGr.published_ref)
  		serviceGr.addQuery('sys_id', '!=', draftGr.published_ref.sys_id);

  	serviceGr.query();
  
  	if (serviceGr.next()) {
  			var tableName = constants.TABLE_NAMES[serviceGr.sys_class_name];
  			var msgFragment = '';
  		
  		if (tableName)
  			msgFragment = tableName + ' ';
  		
  		msgFragment += name;
  		return gs.getMessage("{0} already exists. Please enter a different name.", msgFragment);
  	}
  	
  	return;
  },
  // Service Lifecycle Constraint: 05691ebb3bf02300da7c832b44efc4a8
  _verifyServiceLifeCycleContraint: function(draftGr, newStatus){
  	if (!draftGr.published_ref) {
  		return;
  	}

  	var currentStatus = draftGr.published_ref.service_status;
  	
  	if (currentStatus == 'operational' && !(newStatus == 'operational' || newStatus == 'retiring' || newStatus == 'retired' || newStatus == 'obsolete')) {	
  		var serviceStatusChoices = new GlideChoiceList().getChoiceList('cmdb_ci_service', 'service_status');
  		var retiring = serviceStatusChoices.getChoice('retiring');
  		var retired = serviceStatusChoices.getChoice('retired');
  		var obsolete = serviceStatusChoices.getChoice('obsolete');
  		var operational = serviceStatusChoices.getChoice('operational').getLabel().toLowerCase();
  		var lifeCycleLabels = [];
  		if (retiring)
  			lifeCycleLabels.push(retiring.getLabel().toLowerCase());
  		if (retired)
  			lifeCycleLabels.push(retired.getLabel().toLowerCase());
  		if (obsolete)
  			lifeCycleLabels.push(obsolete.getLabel().toLowerCase());
  		
  		var labelString = lifeCycleLabels.join(gs.getMessage(' or '));
  		
  		return gs.getMessage('{0} can only move forward to {1} from {2}.', [draftGr.service_status.getLabel(), labelString , operational]);
  	}

  	return;
  },
  // Service Offering Catalog Phase Check: 6a318b233b531300bc1e832b44efc456
  _verifyOfferingCatalogPhaseCheck: function(draftGr, newPhase){
  	if (newPhase == 'catalog') {
  		var offeringGr = new GlideAggregate('service_offering');
  		var grQuery = offeringGr.addQuery('parent', draftGr.sys_id);
  		if (draftGr.published_ref)
  			grQuery.addOrCondition('parent', draftGr.published_ref);

  		offeringGr.addAggregate('COUNT');
  		offeringGr.query();
  		if (offeringGr.next()) {
  			if (offeringGr.getAggregate('COUNT') == 0)
  				return gs.getMessage('A service cannot move to a {0} {1} unless it has least one offering', [new GlideChoiceList().getChoiceList('cmdb_ci_service', 'portfolio_status').getChoice('catalog').getLabel().toLowerCase(),draftGr.portfolio_status.getLabel().toLowerCase()]);
  		}
  	}
  	return;
  },
  //Validate parent's operational state: 0e50c35ab3203300f224a72256a8dc6a
  _verifyParentOperationalStatus: function(draftGr, newStatus, parent) {
  	if (!parent) return;
  	var parentServiceGr = new GlideRecord("cmdb_ci_service");
  	parentServiceGr.get(parent);
  	if (newStatus == 'operational' && parentServiceGr.getValue('service_status') != 'operational') {
  		var gcl = new GlideChoiceList();
  		var choiceList = gcl.getChoiceList('cmdb_ci_service', 'service_status');
  		var opLabel = choiceList.getChoice('operational').getLabel();
  		return gs.getMessage('The parent service is not in {0} state, this offering cannot be made Operational.', [opLabel, draftGr.getDisplayValue('service_status')]);
  	}
  	return;
  },

  
  type: 'ASBVerifyDraftUtilSNC'
});

Sys ID

02b95da6437f2110a6dfaff3fab8f27f

Offical Documentation

Official Docs: