background Script - code correction

Community Alums
Not applicable
Hello All 
 
I have background script which add user's manager into the group('Approval'). If user is no longer manager then it will removed it from the approval group. 
Now i have to add one more condition, if the manager is having itil role then he / she should not be get added into the approval group. I have added a function but it is not working as per the requirement. Could you please check my code and suggest me. 

var groupId = 'e883de65935102109e34b03efaba1094';

 

addMembersToGroup(groupId);
checkExistingMembers(groupId);



function checkExistingMembers(groupId) {
    var isManager = false;
    var query = 'group=' + groupId;
    var grMember = new GlideRecord('sys_user_grmember');
    grMember.addEncodedQuery(query);
    grMember.query();
    while (grMember.next()) {
        isManager = checkIfManager(grMember.user);
        if (isManager == false) {
            grMember.deleteRecord();
        }
    }
}

 

function checkIfManager(userManager) {
    var return_flag = false;
    var query = 'manager=' + userManager + '^active=true';
    var grUser = new GlideRecord('sys_user');
    grUser.addEncodedQuery(query);
    grUser.query();
    if (grUser.next()) {
        return_flag = true;
    }
    return return_flag;
}




function addMembersToGroup(groupId) {

 

    var query = 'manager!=NULL^active=true';
    var grUser = new GlideRecord('sys_user');
    grUser.addEncodedQuery(query);
    grUser.query();
    while (grUser.next())
    {
        var itilRole = new GlideRecord('sys_user_has_role'); // validation for the itil role of the manager's 
        itilRole.addQuery('user', grUser.manager.sys_id);
        itilRole.addQuery('role', 'itil');
        itilRole.query();
        if (!itilRole.next()) {
            addToGroup(grUser.manager, groupId);
        }
    }
} //  validation for the itil role of the manager's / 

 

function addToGroup(userManager, groupId) {
    var query = 'group=' + groupId + '^user=' + userManager;
    var grMember = new GlideRecord('sys_user_grmember');
    grMember.addEncodedQuery(query);
    grMember.query();
    if (!grMember.next()) {
        grMember.newRecord();
        grMember.group = groupId;
        grMember.user = userManager;
        grMember.insert();
    }
}
1 REPLY 1

Hayo Lubbers
Kilo Sage

Hi @Community Alums ,

 

If you have inherited roles or child groups, it makes things more complicated.

 

Please try with the GlideUser() to check the role/group : https://developer.servicenow.com/dev.do#!/reference/api/washingtondc/server_legacy/GUserAPI#GUser-isMemberOf_S?navFilter=GlideUser

It will return true/false if a user is member of a group or has the specified role.

 

Basic example : 

function getUserInfo(userId){
	var user = gs.getUser().getUserByID(userId); // fetch a different user using the user_name or sys_id field
	gs.info(user.getFirstName());
	gs.info(user.isMemberOf(­'Service Desk'))
	gs.info(user.hasRole(­'itil'))
}

getUserInfo('andrew.jackson');
getUserInfo('beth.anglin');