Name
sn_skill_cfg_page.ManageSkillsExtnPtGroupImpl
Description
Implements extension point sn_skill_cfg_page.ManageSkillsExtnPt Allows customized query and sort order of users by group in the Manage Skills Configurable Page
Script
var ManageSkillsExtnPtGroupImpl = Class.create();
ManageSkillsExtnPtGroupImpl.prototype = {
initialize: function() {},
canHandle: function(params) {
return params.groupBy === 'group';
},
getUsers: function(params) {
var util = new sn_skill_cfg_page.ManageSkillsUtils();
var users = [];
var groups = [];
var grpMembers = {};
var groupGR = new GlideRecord(util.TABLE.GROUP);
groupGR.addQuery('manager', gs.getUserID());
groupGR.addQuery('active', true);
groupGR.orderBy('name');
groupGR.query();
while (groupGR.next())
groups.push(groupGR.getUniqueValue());
var grMemGR = new GlideRecord(util.TABLE.GROUP_MEMBER);
grMemGR.addQuery('group', 'IN', groups.join(',')); // get users in groups managed by logged in user
grMemGR.addQuery('user.active', true);
grMemGR.orderBy('group');
grMemGR.orderBy('user');
if (params.filter && params.filter.sys_user && params.filter.sys_user.sys_id)
grMemGR.addQuery('user', 'IN', params.filter.sys_user.sys_id.join(','));
if (params.filter && params.filter.sys_user && params.filter.sys_user['location.city'])
grMemGR.addQuery('user.location.city', 'IN', params.filter.sys_user['location.city'].join(','));
var pageSize = params.pageSize;
var pageNumber = params.pageNumber;
if (params.pageSize && params.pageNumber != null) {
pageSize = Number(pageSize);
pageNumber = Number(pageNumber);
if (pageSize > 0 && pageNumber >= 0) {
grMemGR.chooseWindow(pageNumber * pageSize, pageNumber * pageSize + pageSize);
}
}
grMemGR.query();
while (grMemGR.next()) {
users.push(grMemGR.getValue('user'));
if (gs.nil(grpMembers[grMemGR.getValue('group')]))
grpMembers[grMemGR.getValue('group')] = {
groupName: grMemGR.getDisplayValue('group'),
users: []
};
grpMembers[grMemGR.getValue('group')].users.push({
'userID': grMemGR.getValue('user'),
'userName': grMemGR.getDisplayValue('user') || " "
});
}
var totalRowCount = Object.keys(params.filter).length === 0 ? this.getTotalUsersRowCount(groups) : grMemGR.getRowCount();
var result = {
grpMembers,
usersList: users,
totalRowCount
};
return result;
},
getTotalUsersRowCount: function(groups) {
var totalRowCount = 0;
var userGA = new GlideAggregate('sys_user_grmember');
userGA.addQuery('group', 'IN', groups.join(','));
userGA.addQuery('user.active', true);
userGA.addAggregate('COUNT');
userGA.query();
if (userGA.next())
totalRowCount = userGA.getAggregate('COUNT');
return totalRowCount;
},
getFilterProps: function(params) {
let results = [];
const util = new ManageSkillsUtils();
var usersIManage = util.getUsersIManage();
userFilterEncodedQuery = 'active=true^sys_idIN' + usersIManage.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: 'ManageSkillsExtnPtGroupImpl'
};
Sys ID
bbdd6c5f53706110dd61ddeeff7b12eb