Name

global.MatchingDimensionSkills

Description

Dimension to process skills.

Script

var MatchingDimensionSkills = Class.create();
MatchingDimensionSkills.prototype = Object.extendsObject(AbstractMatchingDimension, {
  
  process : function(task, users, taskFieldValues, args){
  	var skillsRequired = [];
  	var selectedSkills = taskFieldValues;
  	if(selectedSkills && selectedSkills.length > 0){
  		skillsRequired = selectedSkills;
  	}
  	
  	/*var taskSkillRecord = new GlideRecord('task_m2m_skill');
  	taskSkillRecord.addQuery('mandatory', false);
  	taskSkillRecord.addQuery('task', task.sys_id);
  	taskSkillRecord.query();
  	while(taskSkillRecord.next()){
  		if(skillsRequired.indexOf(taskSkillRecord.skill) < 0){
  			skillsRequired.push(taskSkillRecord.skill);
  		}
  	}*/
  	
  	var returnUsers = {};
  	if(skillsRequired.length == 0)
  	{
  		for(var i=0;i<users.length;i++){
  			var ratingObj = {};
  			ratingObj.rating = 1.0;
  			ratingObj.displayValue = " 0 / 0";
  			ratingObj.detailedDisplayValue = gs.getMessage("Task has no skills"); 
  			returnUsers[users[i]] = ratingObj;
  		}
  		return returnUsers;  
  	}
  	if(new CSMUtil().isDebugOn())
  		gs.log(skillsRequired.join(),"this is skills");
  	var skills = new GlideAggregate("sys_user_has_skill");
  	skills.addEncodedQuery("skillIN" + skillsRequired.join());
  	skills.addEncodedQuery("userIN"+ users.join());
  	skills.addActiveQuery();
  	skills.addAggregate("COUNT(DISTINCT", "skill");
  	skills.addAggregate("MIN", "user.sys_id");
  	skills.groupBy("user");
  	skills.query();
  	
  	while(skills.next()){
  		var skillCount = skills.getAggregate("COUNT(DISTINCT", "skill");
  		var ratingObj = {};
  		ratingObj.rating = Number(skillCount) * 1.0 / skillsRequired.length;
  		ratingObj.value = skillCount;
  		ratingObj.displayValue = skillCount + " / " + skillsRequired.length;
  		ratingObj.detailedDisplayValue = this.getDetailedDisplayValue(skills.getAggregate("MIN", "user.sys_id"), skillsRequired); 
  		returnUsers[skills.getAggregate("MIN","user.sys_id")] = ratingObj;
  	}
  	
  	for(var i=0;i< users.length;i++)
  	{
  		if(!returnUsers[users[i]]){
  			var ratingObj = {};
  			ratingObj.rating = 0;
  			ratingObj.value = 0;
  			ratingObj.displayValue = "0 / " + skillsRequired.length;
  			ratingObj.detailedDisplayValue = gs.getMessage("No Matching Skills"); 
  			returnUsers[users[i]] = ratingObj;
  		}
  	}

  	return returnUsers;
  },
  
  getDetailedDisplayValue : function(user, skillsRequired){
  	var skills = [];
  	var skillGR = new GlideRecord("sys_user_has_skill");
  	skillGR.addEncodedQuery("skillIN" + skillsRequired.join());
  	skillGR.addEncodedQuery("userIN"+ user);
  	skillGR.addActiveQuery();
  	skillGR.query();
  	while(skillGR.next())
  		skills.push(skillGR.getDisplayValue('skill'));
  	return skills.join(", ");
  },

  type: 'MatchingDimensionSkills'
});

Sys ID

979c42d5c32212001c845cb981d3ae0d

Offical Documentation

Official Docs: