Name
global.TeamspaceConsoleGenerator
Description
No description available
Script
var TeamspaceConsoleGenerator = Class.create();
TeamspaceConsoleGenerator.prototype = {
PM_CONSOLE: "pm_console",
PM_CONSOLE_TABLE: "pm_console_table",
PM_CONSOLE_DISPLAY_COLUMN: "pm_console_display_column",
PM_CONSOLE_COLUMN: "pm_console_column",
PM_CONSOLE_COLUMN_ADVANCED: "pm_console_column_advanced",
PM_CONSOLE_DEPENDENCIES: "pm_console_dependencies",
WIDGET_ASSOCIATION: "sn_app_widget_association",
SYS_DB_OBJECT: "sys_db_object",
initialize: function() {
},
isSysDefaults: function(elementName) {
if (elementName.startsWith("sys_"))
return true;
var defaults = ['number'];
return defaults.indexOf(elementName) > -1;
},
cloneRecord: function(record, cloneRecord, skipFields) {
var elements = record.getElements();
for (var i = 0; i < elements.size(); ++i) {
var element = elements.get(i);
var elementName = element.getName();
if (!this.isSysDefaults(elementName) && skipFields.indexOf(elementName) == -1) {
////gs.info("Cloning Field: " + elementName + " -> " + record.getValue(elementName));
cloneRecord[elementName] = record.getValue(elementName);
}
}
return cloneRecord;
},
getTeamspaceTable: function(tableName, teamspaceConfig) {
var gr = new GlideRecord(tableName);
if (gr.instanceOf("pm_portfolio"))
return SNC.PPMConfig.getPortfolioTable(teamspaceConfig);
if (gr.instanceOf("pm_program"))
return SNC.PPMConfig.getProgramTable(teamspaceConfig);
if (gr.instanceOf("pm_project"))
return SNC.PPMConfig.getProjectTable(teamspaceConfig);
if (gr.instanceOf("pm_project_task"))
return SNC.PPMConfig.getProjectTaskTable(teamspaceConfig);
if (gr.instanceOf("dmn_demand"))
return SNC.PPMConfig.getDemandTable(teamspaceConfig);
if (gr.instanceOf("project_status"))
return SNC.PPMConfig.getProjectStatusTable(teamspaceConfig);
if (gr.instanceOf("cost_plan"))
return "cost_plan";
return tableName;
},
console: function(entityName) {
var gr = new GlideRecord(this.PM_CONSOLE);
gr.addQuery("entity", entityName);
gr.addQuery("seeded", true);
gr.query();
return gr;
},
consoleTables: function(consoleId) {
var gr = new GlideRecord(this.PM_CONSOLE_TABLE);
gr.addQuery("pm_console", consoleId);
gr.addQuery("seeded", true);
gr.query();
return gr;
},
consoleColumns: function(consoleTableId) {
var gr = new GlideRecord(this.PM_CONSOLE_COLUMN);
gr.addQuery("pm_console_table", consoleTableId);
gr.addQuery("seeded", true);
gr.query();
return gr;
},
consoleDependencies: function(consoleTableId) {
var gr = new GlideRecord(this.PM_CONSOLE_DEPENDENCIES);
gr.addQuery("pm_console_table", consoleTableId);
gr.addQuery("seeded", true);
gr.query();
return gr;
},
consoleAdvancedColumn: function(consoleColumnId) {
var gr = new GlideRecord(this.PM_CONSOLE_COLUMN_ADVANCED);
gr.get("pm_console_column", consoleColumnId);
gr.addQuery("seeded", true);
return gr;
},
consoleDisplayColumns: function(consoleId) {
var gr = new GlideRecord(this.PM_CONSOLE_DISPLAY_COLUMN);
gr.addQuery("pm_console", consoleId);
gr.addQuery("seeded", true);
gr.query();
return gr;
},
checkCustomRecord: function(recordName) {
var gr = new GlideRecord('sys_update_xml');
gr.addQuery("name", recordName);
gr.addQuery("seeded", true);
gr.query();
if (gr.next())
return true;
return false;
},
createConsoleChoice: function(teamspaceConsoleName) {
//gs.info("Into createConsoleChoice: " + teamspaceConsoleName);
var label = GlideMetaData.getTableLabel(teamspaceConsoleName);
var sysChoice = new GlideSysChoice(this.PM_CONSOLE, "entity");
var choices = sysChoice.getChoices();
var choiceExists = false;
//gs.info(label + " - " + teamspaceConsoleName + " - " + (choices.getRowCount() + 1));
// sysChoice.addNewChoice(label, teamspaceConsoleName, true, choices.getRowCount() + 1);
while (choices.next())
if (choices.getValue('value') == teamspaceConsoleName)
choiceExists = true;
if (!choiceExists) {
var gr = new GlideRecord("sys_choice");
gr.setValue("name", this.PM_CONSOLE);
gr.setValue("element", "entity");
gr.setValue("label", label);
gr.setValue("value", teamspaceConsoleName);
gr.setValue("sequence", (choices.getRowCount() + 1));
gr.insert();
}
},
createConsole: function(entityName, teamspaceConsoleName) {
//gs.info("Into createConsole: consoleName -> " + consoleName + " | teamspaceConsoleName -> " + teamspaceConsoleName);
this.createConsoleChoice(teamspaceConsoleName);
var console = this.console(entityName);
while (console.next()) {
//if(this.checkCustomRecord(this.PM_CONSOLE+"_"+console.getValue("sys_id")))
// continue;//Don't clone custom records to teamspace
var teamspaceConsoleId;
var teamspaceConsole;
var skipFields = ['entity', 'table'];
//gs.info("Into createConsole: console.table -> " + console.table);
teamspaceConsole = new GlideRecord(this.PM_CONSOLE);
var tableName = console.getValue("table");
if (tableName === 'cost_plan' || tableName === 'benefit_plan') {
teamspaceConsole.addQuery('entity', teamspaceConsoleName);
teamspaceConsole.addQuery('table', tableName);
} else {
teamspaceConsole.addQuery('table', teamspaceConsoleName);
}
teamspaceConsole.addQuery('context', console.getValue('context'));
teamspaceConsole.query();
if (teamspaceConsole.next()) {
teamspaceConsoleId = teamspaceConsole.getValue("sys_id");
} else {
teamspaceConsole.initialize();
this.cloneRecord(console, teamspaceConsole, skipFields);
teamspaceConsole.entity = teamspaceConsoleName;
if (tableName === 'cost_plan' || tableName === 'benefit_plan') {
teamspaceConsole.table = tableName;
} else {
teamspaceConsole.table = teamspaceConsoleName;
}
teamspaceConsoleId = teamspaceConsole.insert();
}
var displayMappings = this.createDisplayColumns(console, teamspaceConsoleId);
this.createConsoleTables(console, teamspaceConsoleId, teamspaceConsoleName, displayMappings);
}
},
_getSysDbObjectId : function(entityName){
//get sys id of sys_db_object's record
var recordId = '';
var gr = new GlideRecord(this.SYS_DB_OBJECT);
gr.addQuery('name', entityName);
gr.query();
if (gr.next())
recordId = gr.getUniqueValue();
return recordId;
},
createAllWidgetAssociation: function(teamspaceConfig){
var teamspacePortfolioTable = SNC.PPMConfig.getPortfolioTable(teamspaceConfig);
var teamspaceProgramTable = SNC.PPMConfig.getProgramTable(teamspaceConfig);
var teamspaceProjectTable = SNC.PPMConfig.getProjectTable(teamspaceConfig);
var teamspaceDemandTable = SNC.PPMConfig.getDemandTable(teamspaceConfig);
this.createWidgetAssociation("pm_portfolio", teamspacePortfolioTable);
this.createWidgetAssociation("pm_program", teamspaceProgramTable);
this.createWidgetAssociation("pm_project", teamspaceProjectTable);
this.createWidgetAssociation("dmn_demand", teamspaceDemandTable);
},
createWidgetAssociation: function(entityName, teamspaceConsoleName) {
var entityId = this._getSysDbObjectId(entityName);
var teamspaceEntityId = this._getSysDbObjectId(teamspaceConsoleName);
var skipFields = ['association_id'];
//fetching widget association of entities
var grWidgetAssociation = new GlideRecord(this.WIDGET_ASSOCIATION);
grWidgetAssociation.addQuery('association_id', entityId);
grWidgetAssociation.addQuery('association_table', this.SYS_DB_OBJECT);
grWidgetAssociation.query();
while (grWidgetAssociation.next()){
//verifying if the same widget is already associated with teamspace entity
var grTspWidgetAssociation = new GlideRecord(this.WIDGET_ASSOCIATION);
grTspWidgetAssociation.addQuery('association_id', teamspaceEntityId);
grTspWidgetAssociation.addQuery('association_table', this.SYS_DB_OBJECT);
grTspWidgetAssociation.addQuery('widget', grWidgetAssociation.getValue('widget'));
grTspWidgetAssociation.query();
if(grTspWidgetAssociation.next())
continue;
else{
//creating widget association if not mapped yet
grTspWidgetAssociation.initialize();
this.cloneRecord(grWidgetAssociation, grTspWidgetAssociation, skipFields);
grTspWidgetAssociation['association_id'] = teamspaceEntityId;
grTspWidgetAssociation.insert();
}
}
},
createDisplayColumns: function(console, teamspaceConsoleId) {
var teamspaceConsoleDisplayColumnId;
var displayMappings = {};
var consoleDisplayColumns = this.consoleDisplayColumns(console.getValue("sys_id"));
while (consoleDisplayColumns.next()) {
var consoleDisplayColumnId = consoleDisplayColumns.getValue("sys_id");
//if(this.checkCustomRecord(this.PM_CONSOLE_DISPLAY_COLUMN+"_"+consoleDisplayColumnId))
// continue;//Don't clone custom records to teamspace
var teamspaceConsoleDisplayColumn = new GlideRecord(this.PM_CONSOLE_DISPLAY_COLUMN);
teamspaceConsoleDisplayColumn.addQuery('json_column', consoleDisplayColumns.getValue('json_column'));
teamspaceConsoleDisplayColumn.addQuery('pm_console', teamspaceConsoleId);
teamspaceConsoleDisplayColumn.query();
if (teamspaceConsoleDisplayColumn.next())
teamspaceConsoleDisplayColumnId = teamspaceConsoleDisplayColumn.getValue("sys_id");
else {
teamspaceConsoleDisplayColumn.initialize();
var skipFields = ['pm_console'];
this.cloneRecord(consoleDisplayColumns, teamspaceConsoleDisplayColumn, skipFields);
teamspaceConsoleDisplayColumn.pm_console = teamspaceConsoleId;
teamspaceConsoleDisplayColumn.setWorkflow(false);
teamspaceConsoleDisplayColumnId = teamspaceConsoleDisplayColumn.insert();
}
displayMappings[consoleDisplayColumnId] = teamspaceConsoleDisplayColumnId;
}
//gs.info("displayMappings: " + (new JSON()).encode(displayMappings));
return displayMappings;
},
createConsoleTables: function(console, teamspaceConsoleId, teamspaceConsoleName, displayMappings) {
//gs.info("Into createConsoleTables: " + console.getValue("sys_id") + " - " + teamspaceConsoleId + " - " + teamspaceConsoleName);
var consoleTables = this.consoleTables(console.getValue("sys_id"));
while (consoleTables.next()) {
var teamspaceConsoleTableId;
var consoleTableId = consoleTables.getValue("sys_id");
var consoleTableName = consoleTables.getValue("table");
// if(this.checkCustomRecord(this.PM_CONSOLE_TABLE+"_"+consoleTableId))
// continue;//Don't clone custom records to teamspace
var teamspaceConsoleTableName = this.getTeamspaceTable(consoleTableName, teamspaceConsoleName);
//gs.info(consoleTableName + " -> " + teamspaceConsoleTableName);
var teamspaceConsoleTable = new GlideRecord(this.PM_CONSOLE_TABLE);
teamspaceConsoleTable.addQuery('pm_console', teamspaceConsoleId);
teamspaceConsoleTable.addQuery('table', teamspaceConsoleTableName);
teamspaceConsoleTable.query();
if (teamspaceConsoleTable.next())
teamspaceConsoleTableId = teamspaceConsoleTable.getValue("sys_id");
else {
teamspaceConsoleTable.initialize();
var skipFields = ['pm_console', 'table'];
this.cloneRecord(consoleTables, teamspaceConsoleTable, skipFields);
teamspaceConsoleTable.pm_console = teamspaceConsoleId;
teamspaceConsoleTable.table = teamspaceConsoleTableName;
teamspaceConsoleTableId = teamspaceConsoleTable.insert();
}
this.createConsoleColumns(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName, displayMappings);
this.createConsoleDependencies(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName);
}
},
createConsoleColumns: function(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName, displayMappings) {
//gs.info("Into createConsoleColumns: " + consoleTableId + " - " + teamspaceConsoleTableId + " - " + teamspaceConsoleTableName);
var consoleColumns = this.consoleColumns(consoleTableId);
while (consoleColumns.next()) {
var consoleColumnId = consoleColumns.getValue("sys_id");
var consoleColumnDisplayId = consoleColumns.getValue("pm_console_display_column");
// if(this.checkCustomRecord(this.PM_CONSOLE_COLUMN+"_"+consoleColumnId))
// continue;//Don't clone custom records to teamspace
var teamspaceConsoleColumn = new GlideRecord(this.PM_CONSOLE_COLUMN);
teamspaceConsoleColumn.addQuery('pm_console_table', teamspaceConsoleTableId);
teamspaceConsoleColumn.addQuery('table', teamspaceConsoleTableName);
teamspaceConsoleColumn.addQuery('pm_console_display_column', displayMappings[consoleColumnDisplayId]);
teamspaceConsoleColumn.query();
if (!teamspaceConsoleColumn.next()) {
teamspaceConsoleColumn.initialize();
var skipFields = ['pm_console_table', 'table', 'pm_console_display_column'];
this.cloneRecord(consoleColumns, teamspaceConsoleColumn, skipFields);
teamspaceConsoleColumn.pm_console_table = teamspaceConsoleTableId;
teamspaceConsoleColumn.table = teamspaceConsoleTableName;
teamspaceConsoleColumn.pm_console_display_column = displayMappings[consoleColumnDisplayId];
teamspaceConsoleColumn.setWorkflow(false);
var teamspaceConsoleColumnId = teamspaceConsoleColumn.insert();
if (teamspaceConsoleColumn.getValue("advanced") == 'true' || teamspaceConsoleColumn.getValue("advanced") == '1')
this.createConsoleAdvancedColumn(consoleColumnId, teamspaceConsoleColumnId, teamspaceConsoleTableName);
}
}
},
createConsoleDependencies: function(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName) {
//gs.info("Into createConsoleDependencies: " + consoleTableId + " - " + teamspaceConsoleTableId + " - " + teamspaceConsoleTableName);
var consoleDependencies = this.consoleDependencies(consoleTableId);
while (consoleDependencies.next()) {
var consoleDependencyId = consoleDependencies.getValue("sys_id");
var consoleColumnDisplayId = consoleDependencies.getValue("pm_console_display_column");
//if(this.checkCustomRecord(this.PM_CONSOLE_DEPENDENCIES+"_"+consoleDependencyId))
// continue;//Don't clone custom records to teamspace
var teamspaceDependency = new GlideRecord(this.PM_CONSOLE_DEPENDENCIES);
teamspaceDependency.addQuery('pm_console_table', teamspaceConsoleTableId);
// We dont have specifc teamspace table for relations
teamspaceDependency.addQuery('table', consoleDependencies.getValue('table'));
teamspaceDependency.addQuery('join', consoleDependencies.getValue('join'));
teamspaceDependency.addQuery('type', consoleDependencies.getValue('type'));
teamspaceDependency.query();
if (!teamspaceDependency.next()) {
teamspaceDependency.initialize();
var skipFields = ['pm_console_table'];
this.cloneRecord(consoleDependencies, teamspaceDependency, skipFields);
teamspaceDependency.pm_console_table = teamspaceConsoleTableId;
teamspaceDependency.table = consoleDependencies.getValue('table');
teamspaceDependency.setWorkflow(false);
var teamspaceDependencyId = teamspaceDependency.insert();
}
}
},
createConsoleAdvancedColumn: function(consoleColumnId, teamspaceConsoleColumnId, teamspaceConsoleTableName) {
//gs.info("Into createConsoleAdvancedColumn: " + consoleColumnId + " - " + teamspaceConsoleColumnId+ " - "+teamspaceConsoleTableName);
var consoleAdvancedColumn = this.consoleAdvancedColumn(consoleColumnId);
while (consoleAdvancedColumn.isValidRecord()) {
var teamspaceAdvancedConsoleColumn = new GlideRecord(this.PM_CONSOLE_COLUMN_ADVANCED);
teamspaceAdvancedConsoleColumn.initialize();
var skipFields = ['pm_console_column'];
this.cloneRecord(consoleAdvancedColumn, teamspaceAdvancedConsoleColumn, skipFields);
teamspaceAdvancedConsoleColumn.pm_console_column = teamspaceConsoleColumnId;
teamspaceAdvancedConsoleColumn.reference_table = this.getTeamspaceTable(teamspaceAdvancedConsoleColumn.reference_table, teamspaceConsoleTableName);
teamspaceAdvancedConsoleColumn.table = this.getTeamspaceTable(teamspaceAdvancedConsoleColumn.table, teamspaceConsoleTableName);
return teamspaceAdvancedConsoleColumn.insert();
}
},
process: function(teamspaceConfig) {
//gs.info('Into process: ' + teamspaceConfig);
var teamspacePortfolioTable = SNC.PPMConfig.getPortfolioTable(teamspaceConfig);
var teamspaceProgramTable = SNC.PPMConfig.getProgramTable(teamspaceConfig);
var teamspaceProjectTable = SNC.PPMConfig.getProjectTable(teamspaceConfig);
var teamspaceDemandTable = SNC.PPMConfig.getDemandTable(teamspaceConfig);
this.createConsole("pm_portfolio", teamspacePortfolioTable);
this.createConsole("pm_program", teamspaceProgramTable);
this.createConsole("pm_project", teamspaceProjectTable);
this.createConsole("dmn_demand", teamspaceDemandTable);
//this.createConsole("cost_plan", teamspacePortfolioTable);
},
type: 'TeamspaceConsoleGenerator'
};
Sys ID
f607d8089f102200598a5bb0657fcf0a