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