background Script - code correction

Community Alums
Not applicable
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-20-2024 09:26 PM - edited 04-21-2024 04:19 AM
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';
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
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-22-2024 01:55 AM
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');