Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to auto populate loggedin user's group's manager's group in catalog item?

KellyLewins
Tera Expert

Hi!

I have created a value named "approver_group" that refs sys_user_group table, and I want to auto populate approver's group in it.

Please let me know what scripts or setting is needed.

 

Below are the settings for the other variables.

 

"applicant": shows logged in user's name.

Refs sys_user Table.

Defaualt Value : 

javascript:gs.getUserID()

 

"applicant_group": shows loggedin user's group.

Refs sys_user_group Table.

Defaualt Value : 

javascript:  var showGroup;
 var gr = new GlideRecord("sys_user_grmember"); 
      gr.addQuery("user", gs.getUserID());
      gr.query(); 
      if (gr.next()) {
         showGroup =  gr.group.toString();
      }
showGroup;

 

 "approver": shows logged in user's manager name.

Refs sys_user Table.

Default Value :

javascript: (function() {
    var applicantGroup = current.variables.applicant_group;
    var managerSysId = '';
    if (applicantGroup) {
        var grGroup = new GlideRecord('sys_user_group');
        if (grGroup.get(applicantGroup)) {
            managerSysId = grGroup.manager.toString();
        }
    }
    return 'sys_id=' + managerSysId;
})();

 

Thank you.

1 ACCEPTED SOLUTION

Tushar
Kilo Sage
Kilo Sage

Hi @KellyLewins 

 

I think to auto-populate the "approver_group" field with the manager's group of the logged-in user, you can Create an OnLoad client script:

 

 

function onLoad() {
    var userId = g_user.userID;
    var userGroups = getUserGroups(userId);
    var managerGroup = getManagerGroup(userGroups);

    // set the value of "approver_group" field
    g_form.setValue('approver_group', managerGroup);
}

function getUserGroups(userId) {
    var userGroups = [];
    
    // query the sys_user_grmember table to get groups of the user
    var grGroupMember = new GlideRecord('sys_user_grmember');
    grGroupMember.addQuery('user', userId);
    grGroupMember.query();

    while (grGroupMember.next()) {
        userGroups.push(grGroupMember.group.toString());
    }

    return userGroups;
}

function getManagerGroup(userGroups) {
    // Iterate through user's groups and find the manager's group
    for (var i = 0; i < userGroups.length; i++) {
        var grGroup = new GlideRecord('sys_user_group');
        if (grGroup.get(userGroups[i])) {
            var managerSysId = grGroup.manager.toString();
            if (managerSysId) {
                var managerGroup = grGroup.name.toString();
                return managerGroup;
            }
        }
    }

    return ''; // return an empty string if manager's group is not found
}

 

 

Please, don't forget to mark my answer as correct if it solves your issue or mark it as helpful if it is relevant for you!

Regards,
Tushar

View solution in original post

3 REPLIES 3

Dr Atul G- LNG
Tera Patron
Tera Patron

Hi @KellyLewins 

 

If the user is part of more than 1 group?

*************************************************************************************************************
If my response proves useful, please indicate its helpfulness by selecting " Accept as Solution" and " Helpful." This action benefits both the community and me.

Regards
Dr. Atul G. - Learn N Grow Together
ServiceNow Techno - Functional Trainer
LinkedIn: https://www.linkedin.com/in/dratulgrover
YouTube: https://www.youtube.com/@LearnNGrowTogetherwithAtulG
Topmate: https://topmate.io/atul_grover_lng [ Connect for 1-1 Session]

****************************************************************************************************************

Anand Kumar P
Giga Patron

Hi @KellyLewins,

Try below script 

(function() {
var applicantGroup = current.variables.applicant_group;

var managerSysId = '';
if (applicantGroup) {
var grGroup = new GlideRecord('sys_user_group');
if (grGroup.get(applicantGroup)) {
var managerSysId = grGroup.manager.toString();
}
}

var managerGroup = '';
if (managerSysId) {
var grManager = new GlideRecord('sys_user_group');
if (grManager.get(managerSysId)) {
managerGroup = grManager.name.toString();
}
}

return managerGroup;
})();

 

Mark it as helpful and solution proposed if it serves your purpose.
Thanks,
Anand

Tushar
Kilo Sage
Kilo Sage

Hi @KellyLewins 

 

I think to auto-populate the "approver_group" field with the manager's group of the logged-in user, you can Create an OnLoad client script:

 

 

function onLoad() {
    var userId = g_user.userID;
    var userGroups = getUserGroups(userId);
    var managerGroup = getManagerGroup(userGroups);

    // set the value of "approver_group" field
    g_form.setValue('approver_group', managerGroup);
}

function getUserGroups(userId) {
    var userGroups = [];
    
    // query the sys_user_grmember table to get groups of the user
    var grGroupMember = new GlideRecord('sys_user_grmember');
    grGroupMember.addQuery('user', userId);
    grGroupMember.query();

    while (grGroupMember.next()) {
        userGroups.push(grGroupMember.group.toString());
    }

    return userGroups;
}

function getManagerGroup(userGroups) {
    // Iterate through user's groups and find the manager's group
    for (var i = 0; i < userGroups.length; i++) {
        var grGroup = new GlideRecord('sys_user_group');
        if (grGroup.get(userGroups[i])) {
            var managerSysId = grGroup.manager.toString();
            if (managerSysId) {
                var managerGroup = grGroup.name.toString();
                return managerGroup;
            }
        }
    }

    return ''; // return an empty string if manager's group is not found
}

 

 

Please, don't forget to mark my answer as correct if it solves your issue or mark it as helpful if it is relevant for you!

Regards,
Tushar