Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

How to delete multiple User Relationships record in workflow runscript ?

ads
Tera Expert

Hi All,

I want to delete multiple record in the User Relationship table by getting the ci from the variable in the cat item and users from a list collector type variable. I used the below run script, Its not deleting the multiple record. Can anyone help me on this ?

var dataCenter = current.variables.data_centre;

if (type == 'Remove access') {
    var removeRel = current.variables.please_select_person_to_remove.toString().split(',');//list collector type variable
    for (var i = 0; i < removeRel.length; i++) {
 
        var userGR = new GlideRecord('sys_user');
        userGR.addQuery('sys_id', removeRel[i]);
        userGR.query();
        if (userGR.next()) {
 
            var relDelete = new GlideRecord("cmdb_rel_person");
            relDelete.addQuery('ci', dataCenter);
            relDelete.addQuery('user', userGR.sys_id);
            relDelete.query();
            while (relDelete.next()) {
                relDelete.deleteRecord();
            }
        }
    }
}
 
13 REPLIES 13

SP22
Giga Sage

Hi @ads 
can you please try with below code and see in logs whether your get right data or not.

var dataCenter = current.variables.data_centre;
gs.info("Data Center: " + dataCenter);

if (type == 'Remove access') {
    var removeRel = current.variables.please_select_person_to_remove.toString().split(',');
    gs.info("Users to remove: " + removeRel);

    for (var i = 0; i < removeRel.length; i++) {
        var userGR = new GlideRecord('sys_user');
        if (userGR.get(removeRel[i])) { // Use get() to directly retrieve the record
            var relDelete = new GlideRecord("cmdb_rel_person");
            relDelete.addQuery('ci', dataCenter);
            relDelete.addQuery('user', userGR.sys_id);
            relDelete.query();
            gs.info("Query for user " + userGR.sys_id + " with ci " + dataCenter + " returned " + relDelete.getRowCount() + " records");
            
            while (relDelete.next()) {
                gs.info("Deleting record with sys_id: " + relDelete.sys_id);
                relDelete.deleteRecord();
            }
        }
    }
}

 Thanks
SP

ads
Tera Expert

I am getting the below log correctly,

gs.info("Data Center: " + dataCenter);
gs.info("Users to remove: " + removeRel);

I am not getting other logs, that means the script is not coming to the 3rd log 

            gs.info("Query for user " + userGR.sys_id + " with ci " + dataCenter + " returned " + relDelete.getRowCount() + " records");




 

yes, you need to modify it at that point as per your requirement.

ads
Tera Expert

Hi, 

The below query is correct, however the log is not coming.

var relDelete = new GlideRecord("cmdb_rel_person");
relDelete.addQuery('ci', dataCenter);
relDelete.addQuery('user', userGR.sys_id);
relDelete.query();
workflow.info("Query for user " + userGR.sys_id + " with ci " + dataCenter + " returned " + relDelete.getRowCount() + " records");