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.

I am trying to Find Duplicate Fields on form in different section.

sachingawas
Kilo Expert

I want to find a Duplicate field on Form in different section using script,

For Example Assigned To field can be added to two sections on incident form, So I want to find How many tables have such duplicate fields added on form through Script.

1 ACCEPTED SOLUTION

Chris_Hann
ServiceNow Employee
ServiceNow Employee

Try this script:



var duplicatedViewElementAgg = new GlideAggregate('sys_ui_element');


duplicatedViewElementAgg.addQuery('type', '');


duplicatedViewElementAgg.addQuery('sys_ui_section.name', '!=', '');


duplicatedViewElementAgg.groupBy('element');


duplicatedViewElementAgg.groupBy('sys_ui_section.name');


duplicatedViewElementAgg.groupBy('sys_ui_section.view');


duplicatedViewElementAgg.addAggregate('COUNT');


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


duplicatedViewElementAgg.query();




while (duplicatedViewElementAgg.next()) {


    var tableName = duplicatedViewElementAgg.getValue('sys_ui_section.name');


    var view = duplicatedViewElementAgg.getValue('sys_ui_section.view');


    var element = duplicatedViewElementAgg.getValue('element');




    checkFormsForView(view, tableName, element);


}




function checkFormsForView(view, tableName, element) {


    var formGR = new GlideRecord('sys_ui_form');


    formGR.addQuery('name', tableName);


    formGR.addQuery('view', view);


    formGR.addQuery('sys_user', '');


    formGR.query();




    while (formGR.next()) {


          var sectionIDs = getSectionIDs(formGR);




          var hasNoSections = sectionIDs.length == 0;


          if (hasNoSections)


                continue;




          var sectionNames = getSectionsNamesForElement(element, sectionIDs)


          var isInMultipleSections = sectionNames.length >= 2;


          if (isInMultipleSections)


                gs.print('DupField: ' + tableName + '.' + element + ', View: ' + view + ' (Sections: ' + sectionNames + ')');


    }


}




function getSectionsNamesForElement(element, sectionIDs) {


    var sectionGR = new GlideRecord('sys_ui_element');


    sectionGR.addQuery('element', element);


    sectionGR.addQuery('sys_ui_section', 'IN', sectionIDs);


    sectionGR.query();


    var captions = [];




    while (sectionGR.next()) {


          var sectionCaption = sectionGR.sys_ui_section.getDisplayValue();


          if (sectionCaption == '')


                sectionCaption = 'DEFAULT'




          captions.push(sectionCaption);


    }




    return captions;


}




function getSectionIDs(formGR) {


    var sectionIDs = [];




    var formSectionGR = new GlideRecord('sys_ui_form_section');


    formSectionGR.addQuery('sys_ui_form', formGR.getUniqueValue());


    formSectionGR.query();




    while (formSectionGR.next()) {


          sectionIDs.push(formSectionGR.sys_ui_section + '');


    }




    return sectionIDs;


}


View solution in original post

18 REPLIES 18

Kalaiarasan Pus
Giga Sage
You can definitely try writing a script with the information provided by Robert and share it with us.

Honestly I have not seen anything like this asked before and would doubt that you will get a working solution from someone.

I have two scripts


var gr= new GlideRecord('sys_ui_section');


gr.addQuery('name','!=','');


gr.query();


while(gr.next())


{


var tbl = 'incident';


if(gr.name == tbl)


{


gs.print(gr.name +'.'+gr.caption);




}


}




var gr1=new GlideRecord('sys_ui_element');


gr1.addNotNullQuery('element');


gr1.query();


while(gr1.next())


{




gs.print(gr1.element);


}



but I dont know how can I compare sections and reurn values those are matching and duplicate as well


You may try pushing the values in two arrays and use arrayutil's intersect method to find the duplicates between the two


sachingawas
Kilo Expert

Also I tried following script


var g1 =new GlideAggregate('sys_ui_element');


g1.addAggregate('COUNT', 'element');


g1.query();




while(g1.next())


{


var element1 = g1.element;


var elementCount = g1.getAggregate('COUNT', 'element');


var na= 1;


  var nnn= g1.sys_ui_section;


if( elementCount > na)


{


gs.print("The are currently " + elementCount + " count of " + element1);


}




}


I am getting Count of duplicate fields with name


Chris_Hann
ServiceNow Employee
ServiceNow Employee

Try this script:



var duplicatedViewElementAgg = new GlideAggregate('sys_ui_element');


duplicatedViewElementAgg.addQuery('type', '');


duplicatedViewElementAgg.addQuery('sys_ui_section.name', '!=', '');


duplicatedViewElementAgg.groupBy('element');


duplicatedViewElementAgg.groupBy('sys_ui_section.name');


duplicatedViewElementAgg.groupBy('sys_ui_section.view');


duplicatedViewElementAgg.addAggregate('COUNT');


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


duplicatedViewElementAgg.query();




while (duplicatedViewElementAgg.next()) {


    var tableName = duplicatedViewElementAgg.getValue('sys_ui_section.name');


    var view = duplicatedViewElementAgg.getValue('sys_ui_section.view');


    var element = duplicatedViewElementAgg.getValue('element');




    checkFormsForView(view, tableName, element);


}




function checkFormsForView(view, tableName, element) {


    var formGR = new GlideRecord('sys_ui_form');


    formGR.addQuery('name', tableName);


    formGR.addQuery('view', view);


    formGR.addQuery('sys_user', '');


    formGR.query();




    while (formGR.next()) {


          var sectionIDs = getSectionIDs(formGR);




          var hasNoSections = sectionIDs.length == 0;


          if (hasNoSections)


                continue;




          var sectionNames = getSectionsNamesForElement(element, sectionIDs)


          var isInMultipleSections = sectionNames.length >= 2;


          if (isInMultipleSections)


                gs.print('DupField: ' + tableName + '.' + element + ', View: ' + view + ' (Sections: ' + sectionNames + ')');


    }


}




function getSectionsNamesForElement(element, sectionIDs) {


    var sectionGR = new GlideRecord('sys_ui_element');


    sectionGR.addQuery('element', element);


    sectionGR.addQuery('sys_ui_section', 'IN', sectionIDs);


    sectionGR.query();


    var captions = [];




    while (sectionGR.next()) {


          var sectionCaption = sectionGR.sys_ui_section.getDisplayValue();


          if (sectionCaption == '')


                sectionCaption = 'DEFAULT'




          captions.push(sectionCaption);


    }




    return captions;


}




function getSectionIDs(formGR) {


    var sectionIDs = [];




    var formSectionGR = new GlideRecord('sys_ui_form_section');


    formSectionGR.addQuery('sys_ui_form', formGR.getUniqueValue());


    formSectionGR.query();




    while (formSectionGR.next()) {


          sectionIDs.push(formSectionGR.sys_ui_section + '');


    }




    return sectionIDs;


}