Name

global.TeamspaceConsoleSeededDataSync

Description

This is called from fix script (Sync Seeded data on TSpace for Upgrade) , to sync any new seeded planning console configuration from base project configuration to team space configuration

Script

var TeamspaceConsoleSeededDataSync = Class.create();
TeamspaceConsoleSeededDataSync.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",

  initialize: function() {
  },


  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);
      return tableName;
  },

  console: function(tableName) {
      var gr = new GlideRecord(this.PM_CONSOLE);
      gr.addQuery("table", tableName);
  	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.addQuery("pm_console_column", consoleColumnId);
  	gr.addQuery("seeded", true);
  	gr.query();
      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;
  },

 

  syncConsole: function(consoleName, teamspaceConsoleName) {
      //gs.info("Into createConsole: consoleName -> " + consoleName + " | teamspaceConsoleName -> " + teamspaceConsoleName);
      var console = this.console(consoleName);
      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 = new GlideRecord(this.PM_CONSOLE);
          teamspaceConsole.addQuery('table',teamspaceConsoleName);
          teamspaceConsole.addQuery('context',console.getValue('context'));
          teamspaceConsole.query();
          if(teamspaceConsole.next()){
  			teamspaceConsoleId = teamspaceConsole.getValue("sys_id");
  			var baseSeededValue = console.getValue('seeded');
  			teamspaceConsole.setValue('seeded', baseSeededValue);
  			teamspaceConsole.setWorkflow(false);
  			teamspaceConsole.update();
  			var displayMappings = this.syncDisplayColumns(console, teamspaceConsoleId);
  			this.syncConsoleTables(console, teamspaceConsoleId, teamspaceConsoleName, displayMappings);
  		}
      }
  },

  syncDisplayColumns: 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");
  			var baseSeededValue = consoleDisplayColumns.getValue('seeded');
  			teamspaceConsoleDisplayColumn.setValue('seeded', baseSeededValue);
  			teamspaceConsoleDisplayColumn.setWorkflow(false);
  			teamspaceConsoleDisplayColumn.update();
  		}
  		displayMappings[consoleDisplayColumnId] = teamspaceConsoleDisplayColumnId;
          }
  	return displayMappings;
  },

  syncConsoleTables: function(console, teamspaceConsoleId, teamspaceConsoleName, displayMappings) {
      gs.info("Into syncConsoleTables: " + 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");
  			var baseSeededValue = consoleTables.getValue('seeded');
  			teamspaceConsoleTable.setValue('seeded', baseSeededValue);
  			teamspaceConsoleTable.setWorkflow(false);
  			teamspaceConsoleTable.update();
  			this.syncConsoleColumns(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName, displayMappings);
  			this.syncConsoleDependencies(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName);
  		}
          
      }
  },

  syncConsoleColumns: function(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName, displayMappings) {
      gs.info("Into syncConsoleColumns: " + 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()){
  			var teamspaceConsoleColumnId = teamspaceConsoleColumn.getValue('sys_id');
  			var baseSeededValue = consoleColumns.getValue('seeded');
  			teamspaceConsoleColumn.setValue('seeded', baseSeededValue);
  			teamspaceConsoleColumn.setWorkflow(false);
  			teamspaceConsoleColumn.update();
              if(teamspaceConsoleColumn.getValue("advanced") == 'true' || teamspaceConsoleColumn.getValue("advanced") == '1')
                  this.syncConsoleAdvancedColumn(consoleColumnId, teamspaceConsoleColumnId,teamspaceConsoleTableName);
          }
      }
  },

  syncConsoleDependencies: function(consoleTableId, teamspaceConsoleTableId, teamspaceConsoleTableName) {
      gs.info("Into syncConsoleDependencies: " + 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()){
  			var teamspaceDependencyId = teamspaceDependency.getValue('sys_id');
  			var baseSeededValue = consoleDependencies.getValue('seeded');
  			teamspaceDependency.setValue('seeded', baseSeededValue);
  			teamspaceDependency.setWorkflow(false);
  			teamspaceDependency.update();
          }
      }
  },

  syncConsoleAdvancedColumn: function(consoleColumnId, teamspaceConsoleColumnId,teamspaceConsoleTableName) {
      gs.info("Into syncConsoleAdvancedColumn: " + consoleColumnId + " - " + teamspaceConsoleColumnId+ " - "+teamspaceConsoleTableName);
      var consoleAdvancedColumn = this.consoleAdvancedColumn(consoleColumnId);
      while(consoleAdvancedColumn.next()) {
  		var teamspaceAdvancedConsoleColumn = new GlideRecord(this.PM_CONSOLE_COLUMN_ADVANCED);
  			teamspaceAdvancedConsoleColumn.addQuery('pm_console_column',teamspaceConsoleColumnId);
  			teamspaceAdvancedConsoleColumn.addQuery('reference_table',teamspaceConsoleTableName);
  			teamspaceAdvancedConsoleColumn.addQuery('column',consoleAdvancedColumn.getValue('column'));		
  			teamspaceAdvancedConsoleColumn.query();
  		
  		if(teamspaceAdvancedConsoleColumn.next()){
  			var baseSeededValue = consoleAdvancedColumn.getValue('seeded');
  			teamspaceAdvancedConsoleColumn.setValue('seeded', baseSeededValue);
  			teamspaceAdvancedConsoleColumn.setWorkflow(false);
  			teamspaceAdvancedConsoleColumn.update();
  		}
      }
  },

  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.syncConsole("pm_portfolio", teamspacePortfolioTable);
      this.syncConsole("pm_program", teamspaceProgramTable);
      this.syncConsole("pm_project", teamspaceProjectTable);
  	this.syncConsole("dmn_demand", teamspaceDemandTable);
  },
  
  
  type: 'TeamspaceConsoleSeededDataSync'
};

Sys ID

461bee5f87c5130049e94c2c59cb0bb0

Offical Documentation

Official Docs: