deactivate user

BanuMahalakshmi
Tera Contributor

Hi,

 

Assigned to field is list collector data type. when active value changes into false into sys_user table, the value should deactivate into assigned_to field also(cmdb_Ci table). I have tried the below script but it removed all assigned_to field value. pls let me know the changes in the script. Thanks.

 

BanuMahalakshmi_0-1721809357691.png

 

 

  var assignee = new GlideRecord('cmdb_ci');
    assignee .addQuery("assigned_to", '=', current.sys_id.toString());
    assignee .query();
    while (assignee .next()) {
        assignee .assigned_to = "";
        assignee .update();
    }
1 ACCEPTED SOLUTION

Mark Manders
Mega Patron

A list field contains the comma separated sys_id's of the users and you are setting the entire field to 'empty', so that's just doing exactly what you explain it does.

 

Try something like this:

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

        var userSysId = current.sys_id.toString();
        var cmdbCiGr = new GlideRecord('cmdb_ci');
        cmdbCiGr.addQuery('assigned_to', 'CONTAINS', userSysId);
        cmdbCiGr.query();
        
        while (cmdbCiGr.next()) {
            var assignedTo = cmdbCiGr.getValue('assigned_to');
            var assignedToArray = assignedTo.split(',');

            // Remove the inactive user's sys_id from the assigned_to list
            var index = assignedToArray.indexOf(userSysId);
            if (index > -1) {
                assignedToArray.splice(index, 1);
                cmdbCiGr.setValue('assigned_to', assignedToArray.join(','));
                cmdbCiGr.update();
            }
        }
    
})(current, previous);

 


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

View solution in original post

10 REPLIES 10

Hello @AMan1997 ,

No I run business rule as After only, please check screen short again if you don't mind.

Please mark my answer helpful  & correct if it helps you
Thank you

G Ramana Murthy
ServiceNow Developer

The field is of list type as is in the question. This will do exactly the same as the BR already in the question


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

Mark Manders
Mega Patron

A list field contains the comma separated sys_id's of the users and you are setting the entire field to 'empty', so that's just doing exactly what you explain it does.

 

Try something like this:

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

        var userSysId = current.sys_id.toString();
        var cmdbCiGr = new GlideRecord('cmdb_ci');
        cmdbCiGr.addQuery('assigned_to', 'CONTAINS', userSysId);
        cmdbCiGr.query();
        
        while (cmdbCiGr.next()) {
            var assignedTo = cmdbCiGr.getValue('assigned_to');
            var assignedToArray = assignedTo.split(',');

            // Remove the inactive user's sys_id from the assigned_to list
            var index = assignedToArray.indexOf(userSysId);
            if (index > -1) {
                assignedToArray.splice(index, 1);
                cmdbCiGr.setValue('assigned_to', assignedToArray.join(','));
                cmdbCiGr.update();
            }
        }
    
})(current, previous);

 


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

BanuMahalakshmi
Tera Contributor

Thanks for this post. this script examines and remove only one row only. i need to remove a single user (Deactivating username) from the list of all those cmdb_ci list.

How could i execute this code when we have multiple rows contains same username ? 

The script does this for all CI's: the while condition takes care of that.


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark