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
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");