Name
global.ChangeModelAJAXProcessorSNC
Description
ServiceNow code for the ChangeModelAJAXProcessor.
Script
var ChangeModelAJAXProcessorSNC = Class.create();
ChangeModelAJAXProcessorSNC.prototype = Object.extendsObject(AbstractAjaxProcessor, {
initialize: function (request, responseXML, gc) {
AbstractAjaxProcessor.prototype.initialize.call(this, request, responseXML, gc);
},
getModel: function () {
function getAllFieldChoices(table, field) {
var fieldChoices = {};
var choiceGr = new GlideSysChoice(table, field).getChoices();
var order = 0;
while (choiceGr.next()) {
if (choiceGr.getValue("inactive") === "1")
continue;
var choice = {
"value": choiceGr.getValue("value"),
"label": choiceGr.getDisplayValue("label"),
"order": order++
};
fieldChoices[choice.value] = choice;
}
return fieldChoices;
}
var typeCompatibility = gs.getProperty('com.snc.change_management.change_model.type_compatibility', false) === 'true';
var hideChangeModel = gs.getProperty('com.snc.change_management.change_model.hide', false) === 'true';
// Same structure as BR 'Populate scratchpad with model' on change_request
var model = {
"field": "state",
"available_states": [],
"field_choices": {},
"initial_state": "-5",
"record_preset": {},
"hidden": typeCompatibility && hideChangeModel
};
// Order of operations, change sys id takes precedent, then model, then type. Always check and prevent value set to: "undefined"
var changeSysId = JSUtil.nil(this.getParameter('sysparm_change_sys_id')) ? '' : this.getParameter('sysparm_change_sys_id') + '';
var changeType = JSUtil.nil(this.getParameter('sysparm_change_type')) ? '' : this.getParameter('sysparm_change_type') + '';
var modelId = JSUtil.nil(this.getParameter('sysparm_model_sys_id')) ? '' : this.getParameter('sysparm_model_sys_id') + '';
var modelOnForm = 'true' === (this.getParameter('sysparm_model_on_form') + '').toLowerCase();
var tableName = JSUtil.nil(this.getParameter('sysparm_table')) ? '' : this.getParameter('sysparm_table') + '';
var changeRequest = null;
var changeRequestGr = new GlideRecord(tableName);
changeRequestGr.initialize();
var validChange = changeSysId && changeRequestGr.get(changeSysId);
if (validChange && !modelId && !modelOnForm)
modelId = changeRequestGr.getValue('chg_model');
var changeModel = null;
var changeModelGr = new GlideRecord('chg_model');
var validModel = modelId && changeModelGr.get(modelId);
if (validModel)
changeModel = new ChangeModel(changeModelGr);
if (validModel && !tableName)
tableName = changeModelGr.getValue('table_name');
if (!validModel && !tableName)
tableName = 'change_request';
var modelChanged = validChange && validModel && (modelId !== changeRequestGr.getValue('chg_model') && !!modelId !== changeRequestGr.chg_model.nil());
var modelChangedToType = validChange && !validModel && modelChanged;
// only relevant if no model, i.e. type based change
var typeChanged = validChange && !validModel && (changeType !== changeRequestGr.getValue('type') && !!changeType !== changeRequestGr.type.nil());
var typeChangedToModel = validChange && validModel && changeRequestGr.chg_model.nil();
var setInitialState = false;
if (validChange) {
if (modelChanged || typeChanged)
setInitialState = true;
if (modelChangedToType)
changeRequestGr.setValue('chg_model', '');
if (typeChangedToModel)
changeRequestGr.setValue('chg_model', modelId);
}
if (!validChange) {
changeRequestGr = new GlideRecord(tableName);
changeRequestGr.initialize();
setInitialState = true;
// New records with model passed in
if (validModel)
changeModel.applyModel(changeRequestGr);
// If we haven't got a Change Request and Model on form but empty
if (!validModel && modelOnForm && changeType)
changeRequestGr.setValue('type', changeType);
// If we haven't got a Change Request and no Model on form
if (!validModel && !modelOnForm) {
if (typeCompatibility && changeType)
changeRequestGr.setValue('type', changeType);
// change models but removed model from form
if (!typeCompatibility) {
changeModelGr = new GlideRecord('chg_model');
validModel = changeModelGr.get(ChangeModel.getDefaultModelValue(changeRequestGr));
if (validModel) {
changeModel = new ChangeModel(changeModelGr);
changeRequestGr.setValue('chg_model', changeModelGr.getUniqueValue());
changeModel.applyModel(changeRequestGr);
}
}
}
}
changeRequest = new ChangeRequest(changeRequestGr);
model.field = changeRequest.getStateFieldName();
model.initial_state = changeRequest.getInitialState();
if (setInitialState)
changeRequestGr.setValue("state", changeRequest.getInitialState());
if (changeRequest.getState())
model.available_states = [changeRequest.getState()].concat(changeRequest.getNextManualStates());
if (validModel)
model.record_preset = changeModel.getRecordPresetValues();
model.field_choices = getAllFieldChoices(tableName, model.field);
model.available_states.sort(function (a, b) {
return model.field_choices[a].order - model.field_choices[b].order;
});
return JSON.stringify(model);
},
type: 'ChangeModelAJAXProcessorSNC'
});
Sys ID
d13dc09d5397101034d1ddeeff7b129d