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

Community Alums
Not applicable
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-13-2023 09:19 AM
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
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-15-2023 07:06 PM
Use gr.deleteMultiple(); instead of using gr.deleRecord();
Please Mark it as Helpful if it is helpful for you,
Regards,
Satyapriya