Name
sn_skill_cfg_page.ManageSkillsExtnPtDefault
Description
Implements extension point sn_skill_cfg_page.ManageSkillsExtnPtDefault Allows customized query and sort order of users by group in the Manage Skills Configurable Page.
Script
var ManageSkillsExtnPtDefault = Class.create();
ManageSkillsExtnPtDefault.prototype = {
initialize: function() {},
canHandle: function(params) {
return (params.groupBy === 'department' && params.parentDepartment);
},
/*
* add conditions that will result in the users to be displayed on Manage Skills page
*/
getUsers: function(params) {
var parentDepartment = params.parentDepartment;
var isRecursiveDepartment = params.isRecursiveDepartment;
var pageSize = params.pageSize;
var pageNumber = params.pageNumber;
let depts = [];
var gr = new GlideRecord("sys_user");
gr.addActiveQuery();
if (gs.nil(parentDepartment) || !this.getDepartmentGr(parentDepartment)) {
gs.warn("Parent department not provided");
return {
error: true,
errorMessage: gs.getMessage("Could not find parent department")
};
}
if (isRecursiveDepartment === true) {
depts = this.getAllDepartments(parentDepartment, isRecursiveDepartment); // populate fAllDepartments
gr.addQuery("department", "IN", Array.from(depts).join());
} else {
depts.push(parentDepartment);
gr.addQuery("department", parentDepartment);
}
if (params.filter && params.filter.sys_user && params.filter.sys_user.sys_id)
gr.addQuery('sys_id', 'IN', params.filter.sys_user.sys_id.join(','));
if (params.filter && params.filter.sys_user && params.filter.sys_user['location.city'])
gr.addQuery('location.city', 'IN', params.filter.sys_user['location.city'].join(','));
if (pageSize && pageNumber != null) {
pageSize = Number(pageSize);
pageNumber = Number(pageNumber);
if (pageSize > 0 && pageNumber >= 0) {
gr.chooseWindow(pageNumber * pageSize, pageNumber * pageSize + pageSize);
}
}
gr.orderBy('department');
gr.orderBy('name');
gr.query();
var usersList = [];
var grpMembers = {};
while (gr.next()) {
var dept = gr.getValue('department');
if (gs.nil(grpMembers[dept]))
grpMembers[dept] = {
groupName: gr.getDisplayValue('department'),
users: []
};
grpMembers[dept].users.push({
'userID': gr.getUniqueValue(),
'userName': gr.getValue('name') || " "
});
usersList.push(gr.getUniqueValue());
}
var totalRowCount = Object.keys(params.filter).length === 0 ? this.getDepartmentUserCount(depts) : gr.getRowCount();
return {
grpMembers,
usersList,
totalRowCount
};
},
/*
* get list of departments, given a parent department
*/
getAllDepartments(parentDepartment) {
if (gs.nil(parentDepartment)) {
gs.warn("Parent department not provided");
}
this.fAllDepartments = new Map();
var gr = this.getDepartmentGr(parentDepartment);
if (!gr) {
gs.warn("Parent department not found");
}
this.fAllDepartments.set(parentDepartment, {
id: parentDepartment,
label: gr.getValue('name')
});
this._getRecursiveDepartments(parentDepartment);
const ar = Array.from(this.fAllDepartments);
return ar;
},
/*
* helper for getAllDepartments() when recurive option is true
*/
_getRecursiveDepartments(parentDepartment) {
var dep = new GlideRecord("cmn_department");
dep.addActiveQuery();
dep.addQuery("parent", parentDepartment);
dep.query();
while (dep.next()) {
var depSysId = dep.getUniqueValue();
if (!this.fAllDepartments.get(depSysId)) {
this.fAllDepartments.set(depSysId, {
id: depSysId,
label: dep.getValue('name')
});
this._getRecursiveDepartments(depSysId);
}
}
},
getDepartmentGr: function(department) {
var gr = new GlideRecord("cmn_department");
if (gr.get(department))
return gr;
return null;
},
getDepartmentUserCount: function(departments) {
var totalRowCount = 0;
var userGA = new GlideAggregate('sys_user');
userGA.addQuery('department', 'IN', departments.join(','));
userGA.addQuery('active', true);
userGA.addAggregate('COUNT');
userGA.query();
if (userGA.next())
totalRowCount = userGA.getAggregate('COUNT');
return totalRowCount;
},
getFilterProps: function(params) {
let results = [];
const parentDepartment = params.parentDepartment;
const isRecursiveDepartment = params.isRecursiveDepartment;
const util = new ManageSkillsUtils();
const departmentsArr = util.getAllDepartments(parentDepartment, isRecursiveDepartment);
userFilterEncodedQuery = 'active=true^departmentIN' + departmentsArr.join(',');
const skillsMap = util.getSkillsByParentSkill(params.parentSkill, params.isRecursiveSkill, 1000); //Limit the number of skills shown in filter slish bucket to 1000
const skillFilterEncodedQuery = 'active=true^sys_idIN' + Array.from(skillsMap.keys()).join(',');
let filtersMap = {
"Users": {
"table": {
"id": "sys_user",
"label": "Users"
},
"encodedQuery": userFilterEncodedQuery,
"field": {
"id": "sys_id",
"type": "string",
"label": "Sys ID"
}
},
"Skills": {
"table": {
"id": "cmn_skill",
"label": "Skills"
},
"field": {
"id": "sys_id",
"type": "string",
"label": "Sys ID"
},
"encodedQuery": skillFilterEncodedQuery,
},
"Location": {
"table": {
"id": "sys_user",
"label": "Location"
},
"field": {
"id": "location.city",
"type": "string",
"label": "City"
},
"encodedQuery": userFilterEncodedQuery
}
};
for (var key in filtersMap) {
var filterProps = {
"filterName": key,
"dataSource": {
...filtersMap[key],
"type": "table"
},
"targets": [{
"type": "table",
"table": filtersMap[key].table,
"field": filtersMap[key].field
}]
};
results.push(filterProps);
}
return results;
},
type: 'ManageSkillsExtnPtDefault'
};
Sys ID
7e200bf9b7102110045b59fd2e11a97d