RhinoEcmaError

Rajesh77
Tera Contributor

Hi Team,

I have written the below code with the background script and i have got the error, what does it mean please assist me to fix it

 

Rajesh77_0-1681296148551.png

var gr = new GlideRecord("sys_user");
gr.addEncoddedQuery('active=false^user_nameSTARTSWITHvs000986');
var gdt = new GlideDateTime();
gdt.addDays(-30);
gr.addQuery("last_login_time", "<=", gdt);
gr.addActiveQuery();
gr.query();
while (gr.next()){
    gr.active = false;
    gr.update();    
}

var userName = getUsers.getDisplayValue('sys_id');


var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('sys_id=' + userName);
grMember.query();

while (grMember.next()) {
    grMember.deleteRecord();
}


var chkRole = new GlideRecord('sys_user_has_role');
chkRole.addQuery('sys_id=' + userName);
chkRole.query();

while (chkRole.next()) {
    //Delete left over roles
    chkRole.deleteRecord();
    gr.updateMultiple();
    gs.log('record' +gr.getRowCount());
   
}

4 REPLIES 4

sushantmalsure
Mega Sage
Mega Sage

I think you have missed adding complete script here.

if not, then what is getUsers ? is this object or variable.

I see you are trying to use 'userName' later in script which is expecting sys_id.

answer above question to help you better.

and the error you are getting is because getDisplayValue() is not supposed to work on sys_id field if you want to have sys_id and getUsers is object of user then use following

 

var userName = getUsers.sys_id;

 

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure

Aman Kumar S
Kilo Patron

Hi @Rajesh77 ,

Update your script as:

var users = [];
var gr = new GlideRecord("sys_user");
gr.addEncodedQuery('active=false^user_nameSTARTSWITHvs000986');
var gdt = new GlideDateTime();
gdt.addDays(-30);
gr.addQuery("last_login_time", "<=", gdt);
gr.addActiveQuery();
gr.query();
while (gr.next()){
    users.push(gr.getUniqueValue());
    gr.active = false;
    gr.update();    
}
for(var i=0; i<users.length;i++){
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user', users[i]);
grMember.query();
while (grMember.next()) {
    grMember.deleteRecord();
}
var chkRole = new GlideRecord('sys_user_has_role');
chkRole.addQuery('user', users[i]);
chkRole.query();
while (chkRole.next()) {
    //Delete left over roles
    chkRole.deleteRecord();
}
   gs.log('record' +gr.getRowCount());
}
Best Regards
Aman Kumar

Rajesh77
Tera Contributor

my concern is there are users who have not logged in the instance for more than 30 days we need to revoke their license and if they have been added in any group we need to remove them from the groups and we need to send an email notification to them 
Below is the script i have written if its wrong pls give me the correct script

 

var gr = new GlideRecord("sys_user");
gr.addEncoddedQuery('active=false^roles=ITIL');
var gdt = new GlideDateTime();
gdt.addDays(-30);
gr.addQuery("last_login_time", "<=", gdt);
gr.addActiveQuery();
gr.query();
while (gr.next()){
    gr.active = false;
    gr.update();    
}

 

//Set the users name to a variable.
var userName = gr.getDisplayValue('sys_id');

 

//Check the group membership table to see if they are a member of any groups
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('sys_id=' + userName);
grMember.query();

 

while (grMember.next()) {
    grMember.deleteRecord();
}

 

//Now let's check the roles table to ensure nothing was left behind
var chkRole = new GlideRecord('sys_user_has_role');
chkRole.addQuery('sys_id=' + userName);
chkRole.query();

 

while (chkRole.next()) {
    //Delete left over roles
    chkRole.deleteRecord();
    gr.updateMultiple();
    gs.log('record' +gr.getRowCount());

}

 

var gr = new GlideRecord("sys_user");
gr.addEncoddedQuery('active=false^roles=ITIL');
var gdt = new GlideDateTime();
gdt.addDays(-30);
gr.addQuery("last_login_time", "<=", gdt);
gr.addActiveQuery();
gr.query();
while (gr.next()){
    gr.active = false;
       

//Set the users name to a variable.
var userName = gr.sys_id;

 

//Check the group membership table to see if they are a member of any groups
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('user',userName);
grMember.query();

while (grMember.next()) {
    grMember.deleteRecord();
}

 

//Now let's check the roles table to ensure nothing was left behind
var chkRole = new GlideRecord('sys_user_has_role');
chkRole.addQuery('user', userName);
chkRole.query();

while (chkRole.next()) {
    //Delete left over roles
    chkRole.deleteRecord();

}
gr.update(); 
}

Have done some modifications please check and test

If my answer has helped with your question, please mark my answer as accepted solution and give a thumb up.
Regards,Sushant Malsure