Remove user from group based on Incident States

preethigovi
Tera Contributor

Hi Team,

 

There is one requirement that whenever incident created caller is added to a group. I have written BR to add caller to group.

Now, I need to remove caller from that group if he doesn't have existing incident in incident table. It must not be based on Active field rather incident state field.

 

Example: David is caller he has incidents with mixed state , since he has incident with Onhold,in progress,new state he must not be removed from group

 

preethigovi_0-1729825928458.png

 

Example 2: Admin has one incident that is close, no inprog or new, onhold incs so he must be removed from group.

preethigovi_1-1729825996947.png

Example 3: Survey user has 2 incs with one new and other cancelled. He should not also removed from group.

preethigovi_2-1729826139883.png

Please help me with deletion part logic

 

Thank You

1 ACCEPTED SOLUTION

Harsh_Deep
Giga Sage
Giga Sage

Hello @preethigovi ,

 

Please write this fix script-

var groupSysId ='c88e9defc31d92d0d1455ebeb001319d';  // Replace with the sys_id of the group
    var groupMembers = new GlideRecord('sys_user_grmember');
   // groupMembers.addQuery('group', groupSysId);
    groupMembers.addEncodedQuery('group=c88e9defc31d92d0d1455ebeb001319d');  // Query all members of the group
    groupMembers.query();
    while (groupMembers.next()) {
        var userId = groupMembers.user.sys_id.toString();
        groupMembers.setWorkflow(false);
       gs.info('testing' + userId);
       
//gs.print('HR USERS' + Hrprofile.sys_id.toString())
       var a= new sn_jny.testscriptinclude().test(userId,groupMembers);
       if(a==true){
        groupMembers.deleteRecord();
       }
        }

 

and below script include-

var testscriptinclude = Class.create();
testscriptinclude.prototype = {
    initialize: function() {
   
    },
    test:function(userId,groupMembers){
        var activeIncidentCheck = new GlideRecord('sn_jny_journey');
        activeIncidentCheck.addEncodedQuery('manager.user='+ userId +'^state=ready^ORstate=draft');
        //activeIncidentCheck.addQuery('manager', Hrprofile.sys_id.toString());  // Check if the user is the caller
        activeIncidentCheck.query();
   gs.info(activeIncidentCheck.getRowCount());
            if (!activeIncidentCheck.next()) {
                gs.info('members list');
               // groupMembers.deleteRecord();
               return true;
               
    }
    else{
        return false;
    }
    },
    type: 'testscriptinclude'
};

 

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.

View solution in original post

3 REPLIES 3

Pratiksha Kalam
Kilo Sage

Hello ,
You can store the state values which you want to prevent by comma separated. and then in same BR take incident table. query states . n remove those user .

Thanks ,
Pratiksha.k

Sandeep Rajput
Tera Patron
Tera Patron

@preethigovi You can create an onBefore update business rule on incident table 

 

(function executeRule(current, previous /*null when async*/) {

    // Query for other incidents in "New," "In Progress," or "On Hold" states for the same caller
    var incGR = new GlideRecord('incident');
    incGR.addQuery('caller_id', current.caller_id);
    incGR.addQuery('state', 'IN', '1,2,3'); // Assuming states: 1 = New, 2 = In Progress, 3 = On Hold
    incGR.query();

    // If there are no active incidents, remove the caller from the group
    if (!incGR.hasNext()) {
        var userGR = new GlideRecord('sys_user_grmember'); // Group Member Table
        userGR.addQuery('user', current.caller_id); // Caller ID
        //userGR.addQuery('group', <'group sys_id'>); // Add Group Sys ID 
        userGR.query();

        while (userGR.next()) {
            userGR.deleteRecord(); // Removes the caller from each group they belong to
        }
    }

})(current, previous);

 Hope this helps.

Harsh_Deep
Giga Sage
Giga Sage

Hello @preethigovi ,

 

Please write this fix script-

var groupSysId ='c88e9defc31d92d0d1455ebeb001319d';  // Replace with the sys_id of the group
    var groupMembers = new GlideRecord('sys_user_grmember');
   // groupMembers.addQuery('group', groupSysId);
    groupMembers.addEncodedQuery('group=c88e9defc31d92d0d1455ebeb001319d');  // Query all members of the group
    groupMembers.query();
    while (groupMembers.next()) {
        var userId = groupMembers.user.sys_id.toString();
        groupMembers.setWorkflow(false);
       gs.info('testing' + userId);
       
//gs.print('HR USERS' + Hrprofile.sys_id.toString())
       var a= new sn_jny.testscriptinclude().test(userId,groupMembers);
       if(a==true){
        groupMembers.deleteRecord();
       }
        }

 

and below script include-

var testscriptinclude = Class.create();
testscriptinclude.prototype = {
    initialize: function() {
   
    },
    test:function(userId,groupMembers){
        var activeIncidentCheck = new GlideRecord('sn_jny_journey');
        activeIncidentCheck.addEncodedQuery('manager.user='+ userId +'^state=ready^ORstate=draft');
        //activeIncidentCheck.addQuery('manager', Hrprofile.sys_id.toString());  // Check if the user is the caller
        activeIncidentCheck.query();
   gs.info(activeIncidentCheck.getRowCount());
            if (!activeIncidentCheck.next()) {
                gs.info('members list');
               // groupMembers.deleteRecord();
               return true;
               
    }
    else{
        return false;
    }
    },
    type: 'testscriptinclude'
};

 

Mark Correct if this solves your issue and also mark 👍 Helpful if you find my response worthy based on the impact.