replacing the duplicate number

VaibhavJ
Tera Contributor

Hi All,

 

I am trying to replace the duplicate number in the table and write down the below script 

var dupRecords = [];

    var gaDupCheck1 = new GlideAggregate('cmdb_ci_business_app');

    gaDupCheck1.addQuery('active','true');

    gaDupCheck1.addAggregate('COUNT', 'number');

    gaDupCheck1.groupBy('number');

    gaDupCheck1.addHaving('COUNT', '>', 1);

    gaDupCheck1.query();

    while (gaDupCheck1.next()) {

          dupRecords.push(gaDupCheck1.number.toString());

    }

    gs.print(dupRecords);

fixDuplicates(dupRecords);

    function fixDuplicates(dupRecords) {

   var gr = new GlideRecord('cmdb_ci_business_app');

   gr.addQuery('number', dupRecords);

   gr.orderByDesc('sys_created_on');

   gr.query();

while (gr.next()) {

var nm = new NumberManager('cmdb_ci_business_app');

gr.number = nm.getNextObjNumberPadded();

//gr.update();

}

gs.print(gr.number);

}

 

But when i executed this script, it will replace both the duplicate number with the next available counter where I just need to update only one duplicate number record.

Can someone check this and provide the solution?

 

Thanks!

Vaibhav J

1 ACCEPTED SOLUTION

Anirudh Pathak
Mega Sage

Hi @VaibhavJ,

Please try the below code - 

var gaDupCheck1 = new GlideAggregate('cmdb_ci_business_app');
gaDupCheck1.addQuery('active', 'true');
gaDupCheck1.addAggregate('COUNT', 'number');
gaDupCheck1.addHaving('COUNT', '>', 1);
gaDupCheck1.query();
while (gaDupCheck1.next()) {
    var grDup = new GlideRecord('cmdb_ci_business_app');
    grDup.addQuery('number', gaDupCheck1.number);
    grDup.orderByDesc('sys_created_on');
    grDup.query();
    while (grDup.next()) {
        if (grDup.hasNext()) {
            var nm = new NumberManager('cmdb_ci_business_app');
            grDup.number = nm.getNextObjNumberPadded();
			grDup.setWorkflow(false);
            grDup.autoSysFields(false);
            grDup.update();
        }
    }
}

 

View solution in original post

3 REPLIES 3

Anirudh Pathak
Mega Sage

Hi @VaibhavJ,

Please try the below code - 

var gaDupCheck1 = new GlideAggregate('cmdb_ci_business_app');
gaDupCheck1.addQuery('active', 'true');
gaDupCheck1.addAggregate('COUNT', 'number');
gaDupCheck1.addHaving('COUNT', '>', 1);
gaDupCheck1.query();
while (gaDupCheck1.next()) {
    var grDup = new GlideRecord('cmdb_ci_business_app');
    grDup.addQuery('number', gaDupCheck1.number);
    grDup.orderByDesc('sys_created_on');
    grDup.query();
    while (grDup.next()) {
        if (grDup.hasNext()) {
            var nm = new NumberManager('cmdb_ci_business_app');
            grDup.number = nm.getNextObjNumberPadded();
			grDup.setWorkflow(false);
            grDup.autoSysFields(false);
            grDup.update();
        }
    }
}

 

Dhananjay Pawar
Kilo Sage

Hi,

Try below updated script.

 

var dupRecords = [];

    var gaDupCheck1 = new GlideAggregate('cmdb_ci_business_app');

    gaDupCheck1.addQuery('active','true');

    gaDupCheck1.addAggregate('COUNT', 'number');

    gaDupCheck1.groupBy('number');

    gaDupCheck1.addHaving('COUNT', '>', 1);

    gaDupCheck1.query();

    while (gaDupCheck1.next()) {

          dupRecords.push(gaDupCheck1.number.toString());

    }

    gs.print(dupRecords);

fixDuplicates(dupRecords);

    function fixDuplicates(dupRecords) {

   var gr = new GlideRecord('cmdb_ci_business_app');

   gr.addQuery('number', dupRecords);

   gr.orderByDesc('sys_created_on');

gr.setLimit(1);

   gr.query();

while (gr.next()) {

var nm = new NumberManager('cmdb_ci_business_app');

gr.number = nm.getNextObjNumberPadded();

//gr.update();

}

gs.print(gr.number);

}

Jitendra Diwak1
Kilo Sage

Hi @VaibhavJ,

 

Please try this below code:

 

var dupRecords = [];

var gaDupCheck1 = new GlideAggregate('cmdb_ci_business_app');
gaDupCheck1.addQuery('active', 'true');
gaDupCheck1.addAggregate('COUNT', 'number');
gaDupCheck1.groupBy('number');
gaDupCheck1.addHaving('COUNT', '>', 1);
gaDupCheck1.query();

while (gaDupCheck1.next()) {
    dupRecords.push(gaDupCheck1.number.toString());
}

gs.print(dupRecords);
fixDuplicates(dupRecords);

function fixDuplicates(dupRecords) {
    for (var i = 0; i < dupRecords.length; i++) {
        var gr = new GlideRecord('cmdb_ci_business_app');
        gr.addQuery('number', dupRecords[i]);
        gr.orderByDesc('sys_created_on');
        gr.query();

        if (gr.next()) {
            var nm = new NumberManager('cmdb_ci_business_app');
            gr.number = nm.getNextObjNumberPadded();
            gr.update();
            gs.print("Updated duplicate number for record with sys_id: " + gr.sys_id);
            // Exit the loop after updating one record per duplicate number group
            break;
        }
    }
}

 

Please accept my solution if it works for you or thumps 

 

Thanks

Jitendra

Please accept my solution if it works for and thumps up.