Name

global.MatchingRuleForAssignment

Description

Utility to configure AssignmentWorkbench

Script

var MatchingRuleForAssignment = Class.create();

var CONFIG_TABLE = "matching_rule";
var MATCHING_DIMENSION_FOR_ASSIGNMENT_TABLE = "matching_dimension_for_assignment";
var WORKBENCH_NAME = "assignment_workbench";
var BASE_CONFIG_SYS_ID = "da1727e0d723020058c92cf65e6103bf";
var MATCHING_DIMENSION = "matching_dimension";
var CONFIG_ERROR_MESSAGE_NOT_FOUND = gs.getMessage("Configuration for Assignment Workbench is not found");

MatchingRuleForAssignment.getConfiguration = function () {
  var grUserConfig = new GlideRecordSecure(CONFIG_TABLE);
  var currentUserId = gs.getUserID();
  grUserConfig.addQuery("user", currentUserId);
  grUserConfig.query();
  if (grUserConfig.next()) {
  	return grUserConfig;
  } else {
  	config.preferenceId = null;
  	return null;
  }
};

MatchingRuleForAssignment.getConfigData = function(taskData){
  var awConfig = {};
  awConfig.configData = [];
  var currentUserId = gs.getUserID();
  if(taskData && taskData.tableName && taskData.taskId){
  	var taskRec = new GlideRecordSecure(taskData.tableName);
  	taskRec.get(taskData.taskId);
  	var grconfig = new GlideRecord(CONFIG_TABLE);
  	//grconfig.addQuery('user',currentUserId);
  	grconfig.addActiveQuery();
  	grconfig.addQuery('matching_options', 'recommendation criteria');
  	grconfig.addQuery('table',taskData.tableName);
  	grconfig.query();
  	var match = false;
  	while(grconfig.next()){
  		if(JSUtil.nil(grconfig.getValue('condition')))
  			match = true;
  		else{
  			var filter = new GlideFilter(grconfig.getValue('condition'), "rule-condition");
  			filter.setCaseSensitive(true);
  			match = filter.match(taskRec, true);
  			}
  		if(match){
  			var cdata = {};
  			cdata["tableName"]= grconfig.getDisplayValue("table");
  			cdata["tableSysId"] = grconfig.getValue("table");

  			var dimensionforAssignmentConfig = {};
  			var grDim = new GlideRecordSecure(MATCHING_DIMENSION_FOR_ASSIGNMENT_TABLE);
  			grDim.addQuery("matching_rule",grconfig.getValue('sys_id'));
  			//grDim.addQuery("user",currentUserId);
  			grDim.orderBy('order');
  			grDim.query();

  			while(grDim.next()){
  				var singleDimensionData = {};
  				singleDimensionData["dimensionId"] = grDim.getValue("dimension");
  				var dimensionDisplayValue = JSUtil.nil(grDim.getDisplayValue("dimension.display_name")) ? grDim.getDisplayValue("dimension") : grDim.getDisplayValue("dimension.display_name");
  				singleDimensionData["dimensionName"] = dimensionDisplayValue;
  				singleDimensionData["dimensionOrder"] = grDim.getDisplayValue("order");
  				singleDimensionData["dimensionSelected"] = grDim.getValue("selected");
  				singleDimensionData["dimensionWeight"] = grDim.getDisplayValue("weight");
  				singleDimensionData["dimensionOrder"] = grDim.getValue("order");
  				singleDimensionData["dimensionUse"] = grDim.getValue("dimension_type");
  				singleDimensionData["dimensionRef"] = {};
  				var dimRecord = new GlideRecord("matching_dimension");
  				dimRecord.addQuery("sys_id",grDim.getValue("dimension"));
  				dimRecord.query();
  				if(dimRecord.next()){
  					if(dimRecord.getValue("use_reference")== true){
  						var dimensionRefObj = {};
  						dimensionRefObj["tableName"] = dimRecord.getValue("reference_table");
  						dimensionRefObj["fieldName"] = dimRecord.getValue("reference_field");
  						dimensionRefObj["filterCond"] = dimRecord.getValue("reference_filter");
  						dimensionRefObj["filterLabel"] = dimRecord.getDisplayValue("reference_label");
  						singleDimensionData["dimensionRef"] = dimensionRefObj;
  					}
  				}
  				dimensionforAssignmentConfig[grDim.getValue("dimension")] = singleDimensionData;
  			}	
  		var groupFilterData = {};
  			groupFilterData['table'] = "sys_user_group";
  			groupFilterData['encodedQuery'] = "";
  			groupFilterData['readonly'] = false;
  			groupFilterData['searchField'] = 'name';
  			groupFilterData['attributes'] = '';
  		awConfig.configData.push({"conData":cdata,
  							"dimData":dimensionforAssignmentConfig,
  							"sysID":grconfig.getValue('sys_id'),
  					"noofAgents":GlideProperties.get("assignment_workbench_no_of_agents",20),
  					"groupFilterData":groupFilterData});
  		awConfig.result = "success";
  		break;
  		}
  	}
  	if(!match){
  		awConfig.result = "failure";
  		awConfig.msg = CONFIG_ERROR_MESSAGE_NOT_FOUND;
  	}
  }else{
  	awConfig.result = "failure";
  	awConfig.msg = CONFIG_ERROR_MESSAGE_NOT_FOUND;
  }
  return awConfig;
},

MatchingRuleForAssignment.createNewConfiguration = function(current) {
  var currentBaseRecord = new GlideRecordSecure(CONFIG_TABLE);
  currentBaseRecord.get(BASE_CONFIG_SYS_ID);
  for ( var prop in currentBaseRecord) {
  	if (prop != "sys_id" && prop != "sys_class_name") {
  		current.setValue(prop, currentBaseRecord.getValue(prop));
  		if(new CSMUtil().isDebugOn())
  			gs.log("prop=" + prop + " value=" + currentBaseRecord.getValue(prop));
  	}
  }
};

MatchingRuleForAssignment.getMatchingDimensions = function(){
  var gr = new GlideRecordSecure(MATCHING_DIMENSION);
  gr.query();
  while (gr.next()) {
  	answer.add(gr.getValue("name"), gr.getDisplayValue("name"));
  }
};

Sys ID

0036d3d8d732120058c92cf65e61038c

Offical Documentation

Official Docs: