Need help with Script to add and remove users from group based on true/false field.

Daniel Shock
Kilo Sage

I have a checkbox on the user table to indicate whether or not a user is a manager.  I would like a business rule to maintain a group for managers by adding and deleting users from the group based on wether or not this box is checked.

The add script seems to be working correctly.  But the delete script is deleting users from any group they are a member of.  Here is the faulty script:

 

var gt = new GlideRecord('sys_user_grmember');


gt.addQuery('user',current.sys_id);


gt.addQuery('656d28f81386570031f25e7f3244b0be','sys_id_if_group');


gt.query();


while(gt.next())


{


gt.deleteRecord();


}

 

Help me to understand what I am doing wrong!

 

Thank you so much!

 

Daniel

1 ACCEPTED SOLUTION

Daniel,

Try with the below-edited one and let me know if it worked.

if(current.checkbox_name == true)
{
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group','sysid_of_managers_group');
grp.addQuery('user',current.sys_id);
grp.query();
if(!grp.next())
{
grp.initialize();
grp.group = sysid_of_managers_group;
grp.user = current.sys_id;
grp.insert();
}}
else
{
var grp1 = new GlideRecord('sys_user_grmember');
grp1.addQuery('group','sysid_of_managers_group');
grp1.addQuery('user',current.sys_id);
grp1.query();
if(grp1.next())
{
grp1.deleteRecord();
}
}

Thanks

View solution in original post

9 REPLIES 9

Harish Ragz
Kilo Guru

Can you explain about the below line.

gt.addQuery('656d28f81386570031f25e7f3244b0be','sys_id_if_group');

 

Archana Reddy2
Tera Guru

Hi Daniel,

Try creating After business rule on 'User' table with both Insert and Update checked. This should work.

if(current.checkbox_name == true)
{
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group','sysid_of_managers_group');
grp.addQuery('user',current.sys_id);
grp.query();
if(gr.next())
{
return;
}
else
{
grp.initialize();
grp.group = sysid_of_managers_group;
grp.user = current.sys_id;
grp.insert();
}}
else
{
var grp1 = new GlideRecord('sys_user_grmember');
grp1.addQuery('group','sysid_of_managers_group');
grp1.addQuery('user',current.sys_id);
grp1.query();
if(gr1.next())
{
grp1.deleteRecord();
}
else
{
return;
}}
}

Mark the answer as Correct/Helpful based on its impact.

Thanks,

Archana

That looks good Thanks! -But I'm getting an invalid return at line 9

this is what it looks like after modification:

if(current.u_manager_check == true)
{
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group','656d28f81386570031f25e7f3244b0be');
grp.addQuery('user',current.sys_id);
grp.query();
if(gr.next())
{
return;
}
else
{
grp.initialize();
grp.group = '656d28f81386570031f25e7f3244b0be';
grp.user = current.sys_id;
grp.insert();
}}
else
{
var grp1 = new GlideRecord('sys_user_grmember');
grp1.addQuery('group','656d28f81386570031f25e7f3244b0be');
grp1.addQuery('user',current.sys_id);
grp1.query();
if(gr1.next())
{
grp1.deleteRecord();
}
else
{
return;
}
}

 

but I'm getting an invalid return at line 9...

thoughts?

Daniel,

Try with the below-edited one and let me know if it worked.

if(current.checkbox_name == true)
{
var grp = new GlideRecord('sys_user_grmember');
grp.addQuery('group','sysid_of_managers_group');
grp.addQuery('user',current.sys_id);
grp.query();
if(!grp.next())
{
grp.initialize();
grp.group = sysid_of_managers_group;
grp.user = current.sys_id;
grp.insert();
}}
else
{
var grp1 = new GlideRecord('sys_user_grmember');
grp1.addQuery('group','sysid_of_managers_group');
grp1.addQuery('user',current.sys_id);
grp1.query();
if(grp1.next())
{
grp1.deleteRecord();
}
}

Thanks