Name
global.DependentCIHelper
Description
Helper class which encapsulates all the dependent CI re-usable functions
Script
var DependentCIHelper = Class.create();
DependentCIHelper.prototype = {
initialize: function() {},
CMDB_TABLE: 'cmdb_ci',
LEDGER_TABLE: 'cmdb_dependent_ci_ledger',
EOL_LEDGER_TABLE: 'cmdb_ci_end_of_life_ledger',
COL_ID: 'sys_id',
COL_CLASS_NAME: 'sys_class_name',
COL_CMDB_CI: 'cmdb_ci',
COL_STATE: 'state',
COL_ACTION: 'action',
NEW_STATE: '1',
READY_STATE: '3',
DELETE_ACTION: 'Delete',
// determine if given ci exists, if yes then return sys_class_name else null
getClassName: function(cmdbCi) {
var gr = new GlideRecord(this.CMDB_TABLE);
gr.addQuery(this.COL_ID, cmdbCi);
gr.query();
if (gr.next())
return gr.getValue(this.COL_CLASS_NAME);
return null;
},
//use CMDBMetadata class(cached) to get CMDB class dependent flag
isDependentClass: function(className) {
var jsonStr = SNC.CmdbMetadataScriptableApi.getIdentificationRules(className);
if (gs.nil(jsonStr))
return false;
var jsonObj = JSON.parse(jsonStr);
//for a given class if there is no identification rule defined then return false - (corner case)
return (jsonObj ? !jsonObj['independent'] : false);
},
//given a Ci, Add it to the ledger if its sys class != null & it is dependent
queueDependentCi: function(cmdbCi) {
var className = this.getClassName(cmdbCi);
if (!gs.nil(className) && this.isDependentClass(className)) {
var gr = new GlideRecord(this.LEDGER_TABLE);
gr.initialize();
gr.setValue(this.COL_CMDB_CI, cmdbCi);
gr.setValue(this.COL_STATE, this.NEW_STATE);
gr.setValue(this.COL_ACTION, this.DELETE_ACTION);
gr.insert();
}
},
addOrphanCIToLedger: function(cmdbCi) {
var gr = new GlideRecord(this.LEDGER_TABLE);
gr.initialize();
gr.setValue(this.COL_CMDB_CI, cmdbCi);
gr.setValue(this.COL_STATE, this.READY_STATE);
gr.setValue(this.COL_ACTION, this.DELETE_ACTION);
gr.insert();
},
checkAndAddToEOLLedger: function(ci, className, useLazyInsert) {
var jsonStr = SNC.CmdbMetadataScriptableApi.getDownstreamDependencyInfo(className);
if (gs.nil(jsonStr))
return;
var jsonObj = JSON.parse(jsonStr);
if (Object.keys(jsonObj).length === 0)
return;
var gr = new GlideRecord(this.EOL_LEDGER_TABLE);
gr.initialize();
gr.setValue(this.COL_CMDB_CI, ci);
gr.setValue(this.COL_STATE, this.NEW_STATE);
if(useLazyInsert){
gr.insertLazy();
} else {
gr.insert();
}
},
type: 'DependentCIHelper'
};
Sys ID
904e5a61ff313010456d766cf43bf1ef