How to add a user in a group from a reference field and remove once the request is closed?

Amol Pawar
Tera Guru

Hi Experts,

I have a requirement where i want to add a user in a group from a reference field and remove the same user from that group once that request is closed.

I'm trying it using a BR as below:

var grMemberCheck = new GlideRecord('sys_user_grmember');
    grMemberCheck.addQuery('user', current.delivery_head_email_id);
    grMemberCheck.addQuery('group', '5ebe79d71b7e3110e1c810628b4bcbe8');
    grMemberCheck.query();
    if (!grMemberCheck.hasNext()) {
        var grMember = new GlideRecord('sys_user_grmember');
        grMember.initialize();
        grMember.user = current.delivery_head_email_id;
        grMember.group = '5ebe79d71b7e3110e1c810628b4bcbe8';
        grMember.insert();
    }

It's working fine as well for adding the user in a group but in that group, it's showing one extra user with empty user name.

AmolPawar_0-1740417916543.png

Let me know where am I missing in this?

and also, for removing the same user once the request is closed, what should be the logic?

 

Thanks in advance,

Amol

4 REPLIES 4

Bert_c1
Kilo Patron

You can create a similar BR for the "request" table and add condition on the When tab: "State", "changes to", "closed". with script:

 

 

var grMemberCheck = new GlideRecord('sys_user_grmember');
grMemberCheck.addQuery('user', current.delivery_head_email_id);
grMemberCheck.addQuery('group', '5ebe79d71b7e3110e1c810628b4bcbe8');
grMemberCheck.query();
if (grMemberCheck.next()) {
        grMemberCheck.deleteRecord();
}

 

The BR should run "After".

 

Why you get an extras record requires further analysis. Post how you BR is defined for that.

priyatam_pvp
Tera Guru

Check if the delivery_head_email_id before inserting.



var userSysId = current.delivery_head_email_id;

if (!userSysId) {
gs.info("User sys_id is empty. Skipping group addition.");
} else {
var grMemberCheck = new GlideRecord('sys_user_grmember');
grMemberCheck.addQuery('user', userSysId);
grMemberCheck.addQuery('group', '5ebe79d71b7e3110e1c810628b4bcbe8');
grMemberCheck.query();

if (!grMemberCheck.hasNext()) {
var grMember = new GlideRecord('sys_user_grmember');
grMember.initialize();
grMember.user = userSysId;
grMember.group = '5ebe79d71b7e3110e1c810628b4bcbe8';
grMember.insert();
}
}

Removing the User When Request is Closed :

Add new BR with condition state changes to closed and specify your item as a condition.

var grMemberRemove = new GlideRecord('sys_user_grmember');

    grMemberRemove.addQuery('user', current.delivery_head_email_id);

    grMemberRemove.addQuery('group', '5ebe79d71b7e3110e1c810628b4bcbe8');

    grMemberRemove.query();

    

    while (grMemberRemove.next()) {

        grMemberRemove.deleteRecord();

    }

Voona Rohila
Kilo Patron
Kilo Patron

Hi @Amol Pawar 

Instead of BR, I would suggest please use the same flow which is attached to the Catalog item to handle the logic.

 

What value is stored in delivery_head_email_id?

If email id then use below logic

 

var grMemberCheck = new GlideRecord('sys_user_grmember');
grMemberCheck.addQuery('user.email', current.delivery_head_email_id);
grMemberCheck.addQuery('group', '5ebe79d71b7e3110e1c810628b4bcbe8');
grMemberCheck.query();
if (!grMemberCheck.hasNext()) {

  //get user's sys_id.
    var grSysUser = new GlideRecord('sys_user');
    grSysUser.addEncodedQuery("email=" + current.delivery_head_email_id);
    grSysUser.setLimit(1);
    grSysUser.query();
    if (grSysUser.next()) {
        var grMember = new GlideRecord('sys_user_grmember');
        grMember.initialize();
        grMember.user = grSysUser.sys_id;
        grMember.group = '5ebe79d71b7e3110e1c810628b4bcbe8';
        grMember.insert();
    }
}

 

 

 


Mark it helpful if this helps you to understand. Accept solution if this give you the answer you're looking for
Kind Regards,
Rohila V
2022-25 ServiceNow Community MVP

Voona Rohila
Kilo Patron
Kilo Patron

For extra records - Maybe because of the trigger conditions of the BR.

Make sure you add delivery_head_email_id || is not empty condition


Mark it helpful if this helps you to understand. Accept solution if this give you the answer you're looking for
Kind Regards,
Rohila V
2022-25 ServiceNow Community MVP