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.

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.