Need to remove multiple inactive users from groups

anatara
Giga Contributor

Hi All,

I have a requirement to remove inactive users who are all more than 15 days from today from the group member table by using scheduled job. I have written a script for this. But whenever I execute it, It removes only few inactive users from groups..Assume I have 700 Inactive Grp members, first time - 692, second time - 678..Like that, It is working...But I want it in a single shot. Below is My script., Do we have any functionality ? Because I cannot modify the 'slice' each time.

Please post your suggestions.

Thanks In Advance

gs.log("********Removing Inactive Users from Groups********");

var nowdate = gs.now();

var gr=new GlideRecord("sys_user");

gr.addQuery('active', false);

gr.query();

gs.log('RemovingInactive users: ' + gr.getRowCount());

while(gr.next()){

      var result = gs.dateDiff(nowdate, gr.u_term_date, false);

      var res = result.slice(1,4);

              if(res > 15){

              //gs.log('Day :' + res);

              var grmember = new GlideRecord('sys_user_grmember');

              grmember.addQuery('user', gr.sys_id);

              grmember.query();

              while(grmember.next()){

                      grmember.deleteMultiple();

                      grmember.update();

              }

      }

}

   

5 REPLIES 5

Dubz
Mega Sage

If you want to use deleteMultiple the below should work, this assumes the last update made to a user record would be to mark it inactive.



function deleteUsers(){


var gr = new GlideRecord('sys_user_grmember');


gr.addEncodedQuery('user.active=false^user.sys_updated_on<=' + gs.daysAgo(15));


gr.deleteMultiple();


}



If you're going to use while loops you can use deleteRecord()



var gr = new GlideRecord('sys_user');


gr.addEncodedQuery('active=false^sys_updated_on<=' + gs.daysAgo(15));


gr.query();



while(gr.next()){


var gr1 = new GlideRecord('sys_user_grmember');


gr1.addQuery('user', gr.sys_id);


gr1.query();



while(gr1.next()){


gr1.deleteRecord();


}


}



I haven't tested any of this code, you'll probably want to use setWorkflow(false) as well


anatara
Giga Contributor

I have check and tried but no luck


Jaspal Singh
Mega Patron
Mega Patron

Hi Arunkumar,



Can you try using below background script (if this is an activity required to be taken care once)


 


  1. var gr=new GlideRecord("sys_user");  
  2. gr.addInactiveQuery();  
  3. gr.addQuery('locked_out',true);  
  4. gr.query();  
  5. while(gr.next()){  
  6.   var grmember = new GlideRecord('sys_user_grmember');  
  7.   grmember.addQuery('user', gr.sys_id);  
  8.   grmember.query();  
  9.   while(grmember.next()){  
  10.           grmember.deleteRecord();  
  11.   }  
  12. }  

         


Inactive_Us1474
Giga Guru

Why are you using update after deleteMultiple method? And have you checked the date formats and result value?