Return only members of the group

Mannam Praveen
Tera Expert

I am working on below script. I want to compare these arrays  var directReports = [], var managerReports = [], var appGroupMembers = [] 

At end return only matching users . please help me. Currently I am not gettting the output

 

var currentUser = gs.getUserID();
var currentUserManager;
var directReports = [];
var managerReports = [];
var groupMembers = [];

// Retrieve the manager of the current user
var userGr = new GlideRecord('sys_user');
userGr.addQuery('sys_id', currentUser);
userGr.query();
if (userGr.next()) {
    currentUserManager = userGr.manager;

    // Retrieve direct reports of the current user
    var grUser = new GlideRecord('sys_user');
    grUser.addQuery('manager', currentUser);
    grUser.query();
    while (grUser.next()) {
        directReports.push(grUser.sys_id.toString());
    }

    // Retrieve direct reports of the manager
    if (currentUserManager) {
        var grManager = new GlideRecord('sys_user');
        grManager.addQuery('manager', currentUserManager);
        grManager.query();
        while (grManager.next()) {
            managerReports.push(grManager.sys_id.toString());
        }
    }

    // Retrieve members of the  Group
    var groupGr = new GlideRecord('sys_user_group');
    groupGr.addQuery('name', 'App Manager'); // Use exact group name
    groupGr.query();
    if (groupGr.next()) {
        var groupMemberGr = new GlideRecord('sys_user_grmember');
        groupMemberGr.addQuery('group', groupGr.sys_id);
        groupMemberGr.query();
        while (groupMemberGr.next()) {
            groupMembers.push(groupMemberGr.user.toString());
        }
    }

    // Initialize an array to store common elements
    var commonElements = [];

    // Iterate over directReports and check if each element is also in managerReports and groupMembers
    for (var i = 0; i < directReports.length; i++) {
        var userId = directReports[i];
       
        var inManagerReports = false;
        var inGroupMembers = false;

        // Check if the userId is in managerReports
        for (var j = 0; j < managerReports.length; j++) {
            if (managerReports[j] === userId) {
                inManagerReports = true;
                break;
            }
        }

        // Check if the userId is in groupMembers
        for (var k = 0; k < groupMembers.length; k++) {
            if (groupMembers[k] === userId) {
                inGroupMembers = true;
                break;
            }
        }

        // If the userId is in both managerReports and groupMembers, add to commonElements
        if (inManagerReports && inGroupMembers) {
            commonElements.push(userId);
        }
    }

    gs.info('Common elements: ' + commonElements.join(', '));
}
 
MannamPraveen_0-1725113324350.png

 

2 REPLIES 2

Najmuddin Mohd
Mega Sage

Hi @Mannam Praveen  ,

I am little confused here.

directReports[] - users to whom I am the manager
managerReports[] - users to whom my manager is the manager.

Now, how can there be similar users in these two arrays. Because, Manager is only one field on the user.
It can be ME or My manager.

Or,
the question is get the users to whom I am the manager

get the users to whom my manager is the manager

Now compare them with the users who are also in appGroupMembers[] ?


Regards,
Najmuddin.

we need compare these two arrays var directReports = [], var managerReports = [] with var appGroupMembers = [] and get only reporting mebers if they part of the group and return it