Blog4_TM: (Customization) "Copy" UI action on Test for Test Management 2.0
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
5 hours ago
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);

