Name
global.ChangeModelSNC
Description
ServiceNow code for the ChangeModel class. Extends State Transition Model.
Script
var ChangeModelSNC = Class.create();
ChangeModelSNC.prototype = Object.extendsObject(STTRMModel, {
IMPLEMENTATION_STATES: "implementation_states",
initialize: function(modelGr, _gs) {
STTRMModel.prototype.initialize.call(this, modelGr, _gs);
},
// Applies a change model to a Change Request
applyModel: function(changeRequestGr) {
changeRequestGr.setValue("chg_model", this._gr.getUniqueValue());
this.applyRecordPresets(changeRequestGr);
this.applyInitialState(changeRequestGr, changeRequestGr.chg_model.changes());
},
// Applies the record presets defined in the model to the Change Request
applyRecordPresets: function(changeRequestGr) {
if (!this._gr.record_preset.nil())
changeRequestGr.applyEncodedQuery(this._gr.getValue("record_preset"));
},
getRecordPresetValues: function() {
if (this._gr.record_preset.nil())
return {};
var templateGR = new GlideRecord("sys_template");
templateGR.initialize();
templateGR.setValue("template", this._gr.getValue("record_preset"));
templateGR.setValue("table", this._gr.getValue("table_name"));
var changeGR = new GlideRecord(this._gr.getValue("table_name"));
changeGR.initialize();
if (GlideTemplate.getFromRecord(templateGR).apply(changeGR) !== 0)
return {};
var nvp = {};
var encoded = this._gr.getValue("record_preset");
var elements = encoded.split("^");
elements.forEach(function(element) {
if (element === "EQ")
return;
var pair = element.split("=");
var vals = {};
vals.value = changeGR.getValue(pair[0]);
vals.displayValue = changeGR.getDisplayValue(pair[0]);
nvp[pair[0]] = vals;
});
return nvp;
},
// Returns an array of implementation state values defined for this model
getImplementationStates: function() {
var implementationStates = this.getFromCache(this.IMPLEMENTATION_STATES);
if (implementationStates !== null)
return implementationStates;
implementationStates = [];
var definedStates = this._gr.getValue(this.IMPLEMENTATION_STATES);
if (!definedStates || definedStates.length === 0)
return implementationStates;
var stateGr = new GlideRecord("sttrm_state");
stateGr.addQuery("sys_id","IN",this._gr.getValue(this.IMPLEMENTATION_STATES));
stateGr.query();
while (stateGr.next()) {
implementationStates.push(stateGr.getValue("state_value"));
}
this.addToCache("implementation_states", implementationStates);
return implementationStates;
},
type: 'ChangeModelSNC'
});
ChangeModelSNC.getDefaultReadRoles = function() {
var defaultReadRoles = (gs.getProperty('com.snc.change_management.change_model.default_read_roles') + '').split(',');
if (!Array.isArray(defaultReadRoles) || defaultReadRoles.length < 1)
return '';
var validRoles = [];
var gr = new GlideRecord('sys_user_role');
gr.addQuery('name', 'IN', defaultReadRoles);
gr.query();
while (gr.next())
validRoles.push(gr.getValue('name') + '');
return validRoles.join(',');
};
ChangeModelSNC.getRefQualForChangeRequest = function(changeRequestGr) {
var refQual = "active=true^available_in_ui=true^table_name=" + changeRequestGr.getTableName();
if (changeRequestGr.chg_model.nil())
return refQual + "^EQ";
return refQual + "^NQsys_id=" + changeRequestGr.getValue("chg_model") + "^EQ";
};
ChangeModelSNC.getDefaultModelValue = function(changeRequestGr) {
var tableName = changeRequestGr ? changeRequestGr.getTableName() : "change_request";
// For the Change Request table we want to preserve type compatability functionality if the property is set.
// For extensions we don't need to preserve this, either there's a model or leave blank.
if (tableName === "change_request") {
var typeCompatibility = gs.getProperty(ChangeRequestSNC.TYPE_COMPATIBILITY, "false") === "true";
if (typeCompatibility)
return "";
}
var chgModelGr = new GlideRecord("chg_model");
chgModelGr.addActiveQuery();
chgModelGr.addQuery("default_change_model", "1");
chgModelGr.addQuery("table_name", tableName);
chgModelGr.setLimit(1);
chgModelGr.query();
if (chgModelGr.next())
return chgModelGr.getUniqueValue();
return "";
};
ChangeModelSNC.getDefaultTypeValue = function() {
var typeCompatibility = gs.getProperty(ChangeRequestSNC.TYPE_COMPATIBILITY, "false") === "true";
return (typeCompatibility) ? "normal" : "";
};
Sys ID
9f6f8ff05303101034d1ddeeff7b1280