Name
global.RankConfigurationUtil
Description
No description available
Script
var RankConfigurationUtil = Class.create();
RankConfigurationUtil.prototype = {
initialize: function(gr) {
this.gr = gr;
this.tableLabel = GlideMetaData.getTableLabel(this.gr.getValue('table'));
this.columnLabel = GlideMetaData.getTableFieldLabel(this.gr.getValue('table'), this.gr.getValue('column'));
},
areTableAndColumnNamesValid: function() {
//check duplicate record
var rankGr = new GlideRecord('rank_configuration');
rankGr.addQuery('table', this.gr.getValue('table'));
rankGr.addQuery('column', this.gr.getValue('column'));
rankGr.addQuery('sys_id', '!=', this.gr.getValue('sys_id'));
rankGr.query();
if(rankGr.next()) {
gs.addErrorMessage(gs.getMessage("An entry for {0} [{1}] with {2} already exists.", [this.tableLabel, this.gr.getValue('table'), this.columnLabel]));
return false;
}
//check parent tables
var parentList = GlideDBObjectManager.get().getTables(this.gr.table);
var tableArr = [];
for(var i = 0; i < parentList.size(); i++) {
var table = String(parentList.get(i));
if(table != this.gr.getValue('table'))
tableArr.push(String(parentList.get(i)));
}
var parentGr = new GlideRecord('rank_configuration');
parentGr.addQuery('column', this.gr.getValue('column'));
parentGr.addQuery('table', 'IN', tableArr.join(','));
parentGr.addQuery('include_tables', 'CONTAINS', this.gr.getValue('table'));
parentGr.setLimit(1);
parentGr.query();
if(parentGr.next()) {
var parentLabel = GlideMetaData.getTableLabel(parentGr.getValue('table'));
var parentColumnLabel = GlideMetaData.getTableFieldLabel(parentGr.getValue('table'), parentGr.getValue('column'));
gs.addErrorMessage(gs.getMessage("Rank configuration for {0} with {1} is already included in its parent table configuration: {2} with {3}", [this.tableLabel, this.columnLabel, parentLabel, parentColumnLabel]));
return false;
}
return true;
},
isIncludeTablesValid: function(previousTableName) {
this._trimIncludeTables();
if(!this._validateIncludeTableList()) {
gs.addErrorMessage(gs.getMessage('The Include Tables field must contain only the child tables of {0} [{1}]', [this.tableLabel, this.gr.getValue('table')]));
return false;
}
var childRankConfig = this._findChildConfigRecord();
if(JSUtil.notNil(childRankConfig)) {
gs.addErrorMessage(gs.getMessage("Rank configuration record for {0} already exists. Remove it from the Include Tables field.", [childRankConfig.getValue('table')]));
return false;
}
var otherRankConfig = this._findOtherRankConfigs(previousTableName);
if(JSUtil.notNil(otherRankConfig)) {
var otherRankConfigLabel = GlideMetaData.getTableLabel(otherRankConfig.getValue('table'));
var currentIncludeTables = this.gr.getValue('include_tables').split(',');
var otherIncludeTables = otherRankConfig.getValue('include_tables').split(',');
var repeatedTablesArray = currentIncludeTables.filter(function(table) {
return otherIncludeTables.indexOf(table) !== -1;
});
var repeatedTables = repeatedTablesArray.join(',');
gs.addErrorMessage(gs.getMessage("Rank configuration of {0} [{1}] table already includes {2}.", [otherRankConfigLabel, otherRankConfig.getValue('table'), repeatedTables]));
return false;
}
return true;
},
_findOtherRankConfigs: function(previousTableName) {
var includeTables = this.gr.getValue('include_tables').split(',');
var rankGr = new GlideRecord('rank_configuration');
rankGr.addQuery('table', '!=', previousTableName);
rankGr.addQuery('column', this.gr.getValue('column'));
var qc = rankGr.addQuery('include_tables', 'CONTAINS', includeTables[0]);
for(var i = 1; i < includeTables.length; i++) {
qc.addOrCondition('include_tables', 'CONTAINS', includeTables[i]);
}
rankGr.query();
if(rankGr.next())
return rankGr;
return null;
},
_findChildConfigRecord: function() {
var childGr = new GlideRecord('rank_configuration');
childGr.addQuery('column', this.gr.getValue('column'));
childGr.addQuery('table', 'IN', this.gr.getValue('include_tables'));
childGr.setLimit(1);
childGr.query();
if(childGr.next())
return childGr;
return null;
},
_validateIncludeTableList: function() {
var childList = GlideDBObjectManager.get().getTableExtensions(this.gr.getValue('table'));
var childTables = [];
var includeTables = this.gr.getValue('include_tables').split(',');
for(var i = 0; i < childList.size(); i++) {
var table = String(childList.get(i));
childTables.push(table);
}
for(i = 0; i < includeTables.length; i++) {
if(childTables.indexOf(includeTables[i]) < 0)
return false;
}
return true;
},
validateRankConfig: function(sysClassName, rankTable, rankColumn) {
var rankGr = new GlideRecord('rank_configuration');
rankGr.addQuery('table', rankTable);
rankGr.addQuery('column', rankColumn);
if(sysClassName != rankTable){
rankGr.addQuery('include_tables', 'CONTAINS', sysClassName).addOrCondition('include_all_child_tables', true);
}
rankGr.query();
if(rankGr.next())
return true;
return false;
},
_trimIncludeTables: function() {
var includeTables = this.gr.getValue('include_tables').split(',');
var arr = [];
for(var i = 0; i < includeTables.length; i++) {
var table = includeTables[i].trim();
if(JSUtil.notNil(table))
arr.push(table);
}
this.gr.setValue('include_tables', arr.join(','));
},
type: 'RankConfigurationUtil'
};
Sys ID
727ebd265b80230036c32c1cf0f91aff