The CreatorCon Call for Content is officially open! Get started here.

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