The CreatorCon Call for Content is officially open! Get started here.

I have a requirement to reset the form fields to empty when UI Action 'Reset to Draft'

Trupti Krishnam
Tera Contributor

I have a requirement to reset the form fields to empty when UI Action 'Reset to Draft' .There is a UI Action button in the demand table that appears when the state changes to submitted or screening or qualified and for the rest of the stage when i click on reset to draft UI action all the form fields except the number has to set to empty.Please help me to achieve this

 

5 REPLIES 5

palanikumar
Giga Sage
Giga Sage

You can create UI Action with following

Client - Checked

Onclick - resetFields()

condition - current.state == "submitted" || current.state == "screening" || current.state == "qualified"

// Update the above state condition based on the backed value of the State

Script

function resetFields(){
  for(var i = 0; x < g_form.elements.length; i++){
      if(g_form.elements[i].fieldName != "number"){
        g_form.setValue(g_form.elements[i].fieldName, "");
      }
  }
}
Thank you,
Palani

vignesh parthib
Tera Expert

Hi @Trupti Krishnam 

 

In Condition: (current.state == 'submitted' || current.state == 'screening' || current.state == 'qualified')

 

    // Set the state to Draft (replace with correct value or constant)
    current.state = 'draft';

    // Store the number since we don't want to clear it
    var number = current.number;

    // Clear all fields except number
    var fields = current.getFields();

    for (var i = 0; i < fields.size(); i++) {
        var fieldName = fields.get(i).getName();

        // Skip 'number' and some important system fields
        if (fieldName != 'number' && fieldName != 'sys_id' && fieldName != 'sys_created_on' &&
            fieldName != 'sys_created_by' && fieldName != 'sys_updated_on' && fieldName != 'sys_updated_by') {
            try {
                current.setValue(fieldName, '');
            } catch (e) {
                // If it's a reference or complex field, continue without error
                gs.info('Could not clear field: ' + fieldName + ' - ' + e.message);
            }
        }
    }

    // Restore number (if needed — usually not necessary, just precaution)
    current.number = number;

    // Update the record
    current.update();

Or  Recommended Alternative Approach (Safer)
Instead of looping through all fields, explicitly clear only those you know should be reset:

// List of fields to clear
var fieldsToClear = ['short_description', 'description', 'priority', 'requested_by', 'business_case']; // etc.

fieldsToClear.forEach(function(field) {
    if (current.isValidField(field)) {
        current.setValue(field, '');
    }
});

 

Thanks,
Vignesh
"If this solution resolves your issue, kindly mark it as correct."

Ankur Bawiskar
Tera Patron
Tera Patron

@Trupti Krishnam 

you can use a server side UI action for this

UI Action

Condition: 

['2','3','-4'].indexOf(current.state.toSring()) > -1

Script:

clearFields();

function clearFields() {
    try {
        var fields = current.getFields();
        for (var i = 0; i < fields.size(); i++) {
            var field = fields.get(i);
            var descriptor = field.getED();
            var fieldName = descriptor.getName();
            current[fieldName] = '';
        }
        current.update();
    } catch (ex) {
        gs.info(ex);
    }
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

J Siva
Kilo Patron
Kilo Patron

Hi @Trupti Krishnam 
I recommend creating a new "After Update" Business Rule to clear the field values, instead of modifying the OOB UI Action script.
This approach ensures that if you ever want to revert to the original OOB functionality, you can simply deactivate the custom Business Rule without affecting the default behavior.

Regards,
Siva