Name

global.ServiceAvailabilityDomainMigration

Description

No description available

Script

var ServiceAvailabilityDomainMigration = Class.create();
ServiceAvailabilityDomainMigration.prototype = {
  initialize: function() {
  },
  start: function() {
      gs.log("Starting migration of service availability domain data");
  	this.migrateToSysDomain('service_offering_commitment');
  	this.migrateToSysDomain('service_availability');
  },
  migrateToSysDomain: function(table) {
      //make sure column exits
      if (!GlideTableDescriptor.get(table).isValidField('sys_domain'))
          return false;

      this.removeAttribute(table);
  
      try {
          if (GlidePluginManager.isActive('com.glide.domain')) {
              var gaUniqueOfferings = new GlideAggregate(table);
              gaUniqueOfferings.addQuery('service_offering.sys_domain','!=', 'global');
              gaUniqueOfferings.addAggregate('COUNT');
              gaUniqueOfferings.groupBy('service_offering');
              gaUniqueOfferings.query();

              try {
                  while(gaUniqueOfferings.next()) {
                      var sysIds = [];
                      var grGetIds = new GlideRecord(table);
                      grGetIds.addQuery('sys_domain', 'global');
                      grGetIds.addQuery('service_offering', gaUniqueOfferings.service_offering);
                      grGetIds.query();
          
                      while(grGetIds.next()) {
                          sysIds.push(grGetIds.getUniqueValue());

                          if (sysIds.length > 1000 || !grGetIds.hasNext()) {
                              var gr = new GlideRecord(table);
                              gr.addQuery('sys_id', sysIds);
                              gr.setValue('sys_domain', gaUniqueOfferings.service_offering.sys_domain);
                              gr.setValue('sys_domain_path', gaUniqueOfferings.service_offering.sys_domain_path);
                              gr.updateMultiple();
                              sysIds = [];
                          }
                      }

                  }
              }
              catch(error) {
                  gs.log(error);
              }
          }
          gs.log("Successfully migrated domain data for " +  table);
      }
      catch(error) {
          gs.log(error);
      }
  },
  removeAttribute: function(table) {
      var grDictionary = new GlideRecord('sys_dictionary');
      grDictionary.addQuery('name', table);
      grDictionary.addQuery('internal_type', 'collection');
      grDictionary.query();

      if (grDictionary.next()) {
          var ga = new GlideAttributes(grDictionary.getValue('attributes'));
          ga.removeAttribute('domain_master');
          grDictionary.setValue('attributes', ga.serializeAttributes());
          grDictionary.update();
      }
  },

  type: 'ServiceAvailabilityDomainMigration'
};

Sys ID

e4103f88c7f30110a6dff2327ec260f1

Offical Documentation

Official Docs: