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

Offical Documentation

Official Docs: