We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Blog4_TM: (Customization) "Copy" UI action on Test for Test Management 2.0

Tanushree Maiti
Giga Sage

Note: This use case - we implemented on 2023. Still if it helps to any team or person, this blog is for you.

 

Use Case: Need a "Copy" button to be enabled in test management record.

                      "Copy" button will copy all details including Test versions of an opened record and the number will be incremented based on the last created test management .

 

Implementation Steps:

 

1. Create a UI Action Copy on table sn_test_management_test

2. Add condition

    current.canCreate() && !RP.getListControl().isOmitNewButton() && !RP.isManyToMany()

3. Add Script:

  

var copyRecord = new GlideRecord('sn_test_management_test');

copyRecord.initialize();

 

copyRecord.setValue('short_description', current.short_description + " 'Duplicated Test'");

copyRecord.update();

// Find any test version which were on the test

var duplicate = new GlideRecord('sn_test_management_test_version');

duplicate.addQuery('test', current.sys_id);

duplicate.query();

while (duplicate.next()) {

    // For each test version found, copy it and set its Test  to the new copied Test created

    var duplicateVersion = new GlideRecord('sn_test_management_test_version');

     duplicateVersion.setValue('test', copyRecord.sys_id);

    //duplicateVersion.setValue('test',duplicate.test);

    duplicateVersion.setValue('owner',duplicate.owner);

    duplicateVersion.setValue('short_description', duplicate.short_description);

    duplicateVersion.setValue('runnable_version', duplicate.runnable_version);

    duplicateVersion.setValue('latest_version', duplicate.latest_version);

    duplicateVersion.setValue('result', duplicate.result);

    duplicateVersion.update();

       

        var steps = new GlideRecord('sn_test_management_step');

        steps.addQuery('test_version', duplicate.sys_id);

        steps.orderBy('order');

        steps.orderBy('step');

        steps.query();

       

        while (steps.next()) {

            var newStep = new GlideRecord('sn_test_management_step');

            newStep.setValue('step', steps.getValue('step'));

            newStep.setValue('needs_verification', steps.getValue('needs_verification'));

            newStep.setValue('order', steps.getValue('order'));

            newStep.setValue('test_version', duplicateVersion.sys_id);

            newStep.update();

        }

}

 

// Find any steps which were on the test version

var getSteps = new GlideRecord('sn_test_management_step');

getSteps.addQuery('test_version', copyRecord.sys_id);

getSteps.query();

while (getSteps.next())

 

// For each step found, copy it and set its Test Version to the new version created

{

    var newStep = new GlideRecord('sn_test_management_step');

    newStep.initialize();

    newStep.setValue('test_version', duplicate.sys_id);

    newStep.setValue('step', getSteps.step);

    newStep.setValue('order', getSteps.order);

    newStep.setValue('needs_verification', getSteps.needs_verification);

    newStep.update();

}

 

// Find any Test Set which were on the test

var getSet = new GlideRecord('sn_test_management_m2m_test_set_test');

getSet.addQuery('test', current.sys_id);

getSet.query();

while (getSet.next())

 

// For each Test Set found, copy it and set its Test  to the new Copied Test created

{

    var newSet = new GlideRecord('sn_test_management_m2m_test_set_test');

    newSet.initialize();

    newSet.setValue('test', copyRecord.sys_id);

    newSet.setValue('sys_domain', getSet.sys_domain);

    newSet.setValue('test_set', getSet.test_set);

    newSet.update();

}

action.openGlideRecord(copyRecord);

 

 

Please mark this response as Helpful & Accept it as solution if it assisted you with your question.
Regards
Tanushree Maiti
ServiceNow Technical Architect
Linkedin:
0 REPLIES 0