- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 07:57 AM
I need to update the user notification field based on the users removal from a specific group. I have considered a script to run on schedule that checks all users and determines whether or not they are a member of the group. I have also considered the possibility of a 'script action' to determine if the LDAP Group import Event removes a user from the group and updates the user record. Can anyone help me with a script to perform this function?
This is a version of something I've tried as a Business Rule on all sys_users, but it is not working:
Table: sys_user
When: after
updateNotification(current.user);
function updateNotification() {
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id','=',userSysID);
gr.query();
while (gr.next()) {
//Now see if they are a member of the group
var grpMbr = new GlideRecord('sys_user_grmember');
grpMbr.addQuery('name', 'Notification Disabled');
grpMbr.query();
if (grpMbr.next()) {
gr.notification = 1;
gr.update();
} else {
gr.notification = 2;
gr.update();
}
}
}
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 12:17 PM
Hi, I made a generic function (member()) to check group membership. It takes a user sys id and a group name and returns true if they are in the group, false if they are not. It is tested/working in my instance.
This is meant to be used as a scheduled job, not a BR. You may have to change line 3 so it makes sense for your instance.
//Scheduled Job/Script:
var gr = new GlideRecord('sys_user');
gr.addQuery('notification', '1');//querying all notification disabled users
gr.query();
while(gr.next()) {
//iterating through disabled users, checking group membership:
if( !member(gr.sys_id, 'Notification Disabled') ) {
//if user is NOT a member of Notification Disabled:
gr.notification = 2; //notification enabled
gr.update();
}
}
function member(user_sys_id, group) {
var group_check = new GlideRecord('sys_user_grmember');
group_check.addQuery('group.name', group);
group_check.addQuery('user', user_sys_id);
group_check.query();
if(group_check.next()) {
return true;
}else{
return false;
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 08:42 AM
First set the value of the Notification field for all on the User form to No=2.
Then check for all the users who are Not part of that group by running a GlideQuery on the sys_user_grmember table. Now just set the value for all these Users to Yes=1.
var gr = new GlideRecord ('sys_user');
gr.addQuery('active',true);
gr.query();
while(gr.next())
{
gr.notification=2;
gr.update();
var grMbr = new GlideRecord('sys_user_member');
grMbr.addQuery('user',gr.name);
grMbr.query();
if(grMbr.next())
{
gr.notification=1;
gr.update();
}
}
Kindly let me know if this works,haven't tested it though.
For testing, try putting in a more exclusive filter in line 2 and add some more filters in there.
Thanks,
Subhajit
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 10:36 AM
Hi, thank you for the suggestion, this did not work.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 08:47 AM
Without digging too deeply, I see that you aren't passing the argument to the function. The variable 'userSysID' is used instead (I don't see it declared/initialized in the script). I also refactored the code a tiny bit.
Try:
updateNotification(current.user);
function updateNotification(cu) {
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id',cu);
gr.query();
while (gr.next()) {
//Now see if they are a member of the group
var grpMbr = new GlideRecord('sys_user_grmember');
grpMbr.addQuery('name', 'Notification Disabled');
grpMbr.query();
if (grpMbr.next()) {
gr.notification = 1;
}else{
gr.notification = 2;
}
gr.update();
}//end while
}
:
If you get any errors please post it in this thread.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2014 08:59 AM
OK, I dug more deeply. Since you are updating the user record and you already have access to the user in sys_user_grmember, try this:
updateNotification(current.user);
function updateNotification(cu) {
var grpMbr = new GlideRecord('sys_user_grmember');
grpMbr.addQuery('group', 'Notification Disabled'); //changed 'name' to 'group'
grpMbr.addQuery('user', cu);
grpMbr.query();
if (grpMbr.next()) {
//user is a member of group 'Notification Disabled':
grpMbr.user.notification = 1;
}else{
//user is not a member:
grpMbr.user.notification = 2;
}
grpMbr.update();
}