in Cmdb_ci i am planning to delete duplicate records with same serial number based on class

Community Alums
Not applicable

in Cmdb_ci i am planning to delete duplicate records with same serial number based on class and keeping the last updated record  and while deleting  i am updating  the Related list data if there is any mismatch between the duplicate record and last updated record  i am using the below script but not working as expected can anyone please help me with this

 

 

var gr = new GlideRecord('cmdb_ci_esx_server');
gr.addNotNullQuery('serial_number');
gr.query();
while (gr.next()) {
var gr2 = new GlideRecord('cmdb_ci_esx_server');
gr2.addQuery('serial_number', gr.serial_number);
gr2.addQuery('sys_id', '!=', gr.sys_id);
gr2.query();
if (gr2.getRowCount() > 1) continue; // Ignore if there are more than 2 duplicates
if (gr2.next()) {
if (gr.sys_updated_on < gr2.sys_updated_on) {
var relatedTables = ['cmdb_ci_network_adapter', 'cmdb_ci_dns_name', 'cmdb_ci_disk'];
relatedTables.forEach(function(table) {
var grRelated = new GlideRecord(table);
grRelated.addQuery('parent', gr.sys_id);
grRelated.query();
while (grRelated.next()) {
var grNewRelated = new GlideRecord(table);
grNewRelated.addQuery('parent', gr2.sys_id);
grNewRelated.addQuery('name', grRelated.name);
grNewRelated.query();
if (grNewRelated.next()) continue; // Ignore if the related list data is the same
grNewRelated.initialize();
grNewRelated.name = grRelated.name;
grNewRelated.parent = gr2.sys_id;
grNewRelated.insert();
}
});
gr.deleteRecord();
}
}
}
1 REPLY 1

Satyapriya
Mega Sage

Hi@Srikanth,

 Use gr.deleteMultiple(); instead of using gr.deleRecord();

Please Mark it as Helpful if it is helpful for you,

Regards,

Satyapriya