Name

global.SkillCategoryCodeResetMgr

Description

This class is responsible for resetting and recalculating all skill category codes and paths.

Script

var SkillCategoryCodeResetMgr = Class.create();
SkillCategoryCodeResetMgr.prototype = {
  initialize: function() {
  },

  resetCategoryCodes: function() {
  	var updatedRecords = 0;
  	gs.setProperty('cmn_skill_category.code.last_generated', '');
  	var uniqueCodeGenerator = new UniqueCodeGenerator();
  	var categoryInfo = this.getCategories();
  	var categories = categoryInfo.topCategories;
  	var isTreeProcessed = categories.length === 0;
  	while (!isTreeProcessed) {
  		updatedRecords += this.updateCategoryCodes(categories, uniqueCodeGenerator);
  		categories = this.getNextLevelCategories(categoryInfo.categoryMap, categories);
  		isTreeProcessed = categories.length === 0;
  	}
  	return updatedRecords;
  },

  getCategories: function() {
  	var categories = {};
  	var topCategories = [];
  	var gr = new GlideRecord('cmn_skill_category');
  	gr.query();
  	while (gr.next()) {
  		var parent = gr.getValue('parent');
  		var child = gr.getUniqueValue();
  		if (gs.nil(parent))
  			topCategories.push(child);
  		else {
  			if(gs.nil(categories[parent]))
  				categories[parent] = [];
  			categories[parent].push(child);
  		}
  	}
  	return {
  		'topCategories' : topCategories,
  		'categoryMap' : categories
  	};
  },

  updateCategoryCodes: function(categories, uniqueCodeGenerator) {
  	var updatedRecords = 0;
  	var gr = new GlideRecord('cmn_skill_category');
  	gr.addQuery('sys_id', 'IN', categories);
  	gr.query();
  	gr.setWorkflow(false);
  	while (gr.next()) {
  		var code = uniqueCodeGenerator.generateUniqueCode();
  		var parentPath =  gs.nil(gr.parent) ? '' : gr.parent.category_path;
  		var currentPath =  code + '/';
  		gr.setValue('code', code);
  		gr.setValue('category_path', parentPath + currentPath);
  		if(gr.update())
  			updatedRecords++;
  	}
  	return updatedRecords;
  },

  getNextLevelCategories: function(categoryHierarchy, categories) {
  	var nextCategories = [];
  	categories.forEach(function(category) {
  		var children = categoryHierarchy[category];
  		if (!gs.nil(children))
  			nextCategories = nextCategories.concat(children);
  	});
  	return nextCategories;
  },

  type: 'SkillCategoryCodeResetMgr'
};

Sys ID

e02cb75ab3103300290ea943c6a8dcc4

Offical Documentation

Official Docs: