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

Offical Documentation

Official Docs: