---
sourceDocument: Zurich API Reference
sourceDocumentLink: https://www.servicenow.com/docs/r/zurich/api-reference

 Release :

    - zurich

ft:locale :

    - en-US

ft:publication_title :

    - Zurich API Reference

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# Field script use cases

# Field script use cases {#ariaid-title1}

* Release version: Zurich
* 
* Updated March 12, 2026
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 4 minutes to read

Summarize  
![AI sparkle icon](https://servicenow.com/docs/portal-asset/ai-sparkle-icon) Summarized using AI  
This content was generated using new OpenAI-powered functionality. Results are provided on an as is basis and are not guaranteed to be accurate or complete.  

## Summary of Field script use cases

This content provides practical examples of client-side and server-side scripting techniques to customize fields within ServiceNow forms and tables.
These scripts enable automated field population, input sanitization, UI enhancements, field behavior control, date/time manipulation, and timer toggling.
Note that these customizations are developed for specific instances and are not officially supported by Now Support, so thorough testing is essential before deployment.
Show full answer Show less  

## Key Use Cases and Practical Implementations

* **Automatically Populate a Field:** Using an onChange client script on the Incident table's Subcategory field, a matching Short Description can be auto-filled by querying a custom lookup table. This streamlines data entry by reducing manual input.
* **Disable HTML Tags in Descriptions:** Server-side scripting replaces potentially unsafe HTML tags (e.g., \<script\>) in Description and Short Description fields with non-executing text to enhance security and prevent script injection.
* **Trim Leading and Trailing Spaces:** Server-side scripts clean up user data by removing unwanted spaces from FirstName and LastName fields in the sysuser table, improving data consistency.
* **Make a Field Label Flash:** A client script example shows how to highlight a field label temporarily by flashing it in a specified color and duration, improving visibility of key fields.
* **Make a Field Label Bold:** Client scripts can change the font weight of a field label (e.g., Short Description on Incident) to bold, enhancing emphasis in the UI.
* **Make Fields Read-Only:** On the Incident table, client scripts can lock fields such as Incident State, Impact, Urgency, Priority, Configuration Item, and Assigned To based on certain conditions, and hide reference lookup icons for better form control.
* **Set Current Date/Time in Fields:** Using GlideAjax in client scripts combined with a server-side Script Include, you can accurately set date/time fields with current values, correctly handling format and timezone issues.
* **Toggle Timer Field by Field Name:** Client scripts can programmatically start and stop timer fields by simulating button clicks, which helps automate tracking of time-based fields.
* **Modify GlideDateTime Field Values:** Server-side GlideDateTime API methods allow adding or subtracting time intervals (seconds, days, weeks, months, years) to date/time fields, supporting complex date calculations and adjustments within scripts.

## Why This Matters

These script use cases empower ServiceNow customers to tailor form behavior, enhance data quality, improve user experience, and automate routine tasks. Proper application of these scripts can lead to more efficient incident handling, standardized data, and improved interface responsiveness.

Since these scripts are provided as examples and not officially supported, customers should carefully test and adapt them to their unique environments to ensure reliability and compliance with internal policies.  
Common use cases for field customization scripts.
Warning:  
The customization described here was developed for use in specific instances, and is not supported by Now Support. This method is provided as-is and should be tested thoroughly before implementation. Post all questions and comments regarding this customization to our community [forum](http://community.service-now.com/).

For more information, see [Server API reference](https://www.servicenow.com/docs/uieOz3tI3SKtP_eSQdDMCQ "Use server APIs in scripts to change the functionality of applications, or when you create new applications.").

## Automatically populate a field {#r_UsefulFieldScripts__section_upr_nvx_mtb}

The following example shows how to use a client script to auto-fill a Short Description based on the selected Subcategory.

In this case, if the table has a record with Subcategory = Password
and Short Description = Password Reset. When the user selects the
Subcategory of Password on the Incident
form, a client script looks up the matching record and sets Short Description equal to Password Reset.  
Client script settings:

* Type = onChange
* Table name = incident
* Field name = Subcategory

{#r_UsefulFieldScripts__ul_ix3_hyx_mtb}

    function onChange(control, oldValue, newValue, isLoading){
        if(isLoading){return;}
        var newrec = gel('sys_row');
        //Check if new record
        if (newrec.value == -1) {
            var lookup = new GlideRecord('u_short_desc_lookup');
            lookup.addQuery('u_subcategory', g_form.getValue('subcategory'));
            lookup.query();
            var temp; //temp var - reusable
            if(lookup.next()){
                temp = lookup.u_short_description;
                if(null != temp) {
                    //Set the form value from lookup if there is a lookup value
                    g_form.setValue('short_description', temp);
                } else {
                    g_form.setValue('short_description',"");
                    }
              } else {
                  //If a lookup record does not exist based on lookup.addQuery
                  //Then set to UNDEFINED or NULL depending on type
                  g_form.setValue('short_description',"");
                  }
         }
    }

## Disable HTML tags in descriptions {#r_UsefulFieldScripts__section_o2z_kxx_mtb}

This code disables HTML tags in Description and Short Description fields by substituting the tags with non-executing versions.

    doit();
     
    function doit(){ 
     var desc = current.description.toString();
     var shdesc = current.short_description.toString();
     if(desc.indexOf('script>')>-1|| shdesc.indexOf('script>')>-1){
       desc = desc.replace(/<script>/g,"(script)");
       current.description = desc.replace(/<\/script>/g,"(\/script)");
       shdesc = shdesc.replace(/<script>/g,"(script)");
       current.short_description = shdesc.replace(/<\/script>/g,"(\/script)");}
    }

## Eliminate leading and trailing spaces in fields {#r_UsefulFieldScripts__section_kbd_gxx_mtb}

This example of the script trims trailing and leading spaces in the FirstName and LastName fields of the sys_user.

    doit();
     
    function doit(){ 
      var now_GR =new GlideRecord('sys_user');
      gr.query();
      while(gr.next()){
        if((gr.first_name.toString().length!= gr.first_name.toString().trim().length)||(gr.last_name.toString().length!= gr.last_name.toString().trim().length)){
         gr.first_name= gr.first_name.toString().trim();
         gr.last_name= gr.last_name.toString().trim();
         gr.autoSysFields(false);
         gr.update();}}
    }

## Make a field label flash {#r_UsefulFieldScripts__section_lnv_swx_mtb}

The following client script example is for the number field on incident. The label flashes for two seconds.

    g_form.flash("incident.number","#FFFACD",0);

The arguments for the flash method are as follows:

* tablename.fieldname
* RGB color or acceptable CSS color like "blue" or "tomato"
* Integer that determines how long the label flashes:
  * 2 for a 1-second flash
  * 0 for a 2-second flash
  * -2 for a 3-second flash
  * -4 for a 4-second flash
  {#r_UsefulFieldScripts__ul_xky_hdr_4x}
{#r_UsefulFieldScripts__ul_qh5_kgr_4x}  
Note:  
Do not specify this argument if you want the field label colored the specified color.

## Make a field label bold {#r_UsefulFieldScripts__section_y4k_xwx_mtb}

This client script makes the label of a particular field bold. In this case, the field is the Short Description on the Incident Table.

    function onLoad(){
      var l = g_form.getLabel('incident.short_description');
      l.style.fontWeight = 'bold';}

## Make fields read-only {#r_UsefulFieldScripts__section_bhw_4vx_mtb}

This onLoad client script makes the following fields on the Incident \[incident\] table read-only:

* Incident state
* Impact
* Urgency
* Priority
* Configuration item
* Assigned to
{#r_UsefulFieldScripts__ul_pbz_tzx_mtb}  
The script also removes the magnifying glass for the read-only Reference Fields (Configuration item and Assigned to).

    function onLoad(){
    var incidentState = g_form.getValue('incident_state');
    if( incidentState == '6'|| incidentState == '7'){
       g_form.setReadonly('incident_state',true);
       g_form.setReadonly('impact',true);
       g_form.setReadonly('urgency',true);
       g_form.setReadonly('priority',true);
       g_form.setReadonly('cmdb_ci',true);
       g_form.setReadonly('assigned_to',true);}}

## Set current date/time in field {#r_UsefulFieldScripts__section_vpr_nvx_mtb}

You can set date and time values in client scripts and script includes.

Client script
:   You can use the following two lines to set the current date and time in a date/time
    field. This approach bypasses the problem of getting the value into the proper format
    and proper time zone.

        var ajax = new GlideAjax('MyDateTimeAjax');
          ajax.addParam('sysparm_name','nowDateTime');
          ajax.getXML(function(){
            g_form.setValue('put your field name here', ajax.getAnswer());});

:   For more information on running server-side scripts with the client, refer to [GlideAjax](https://www.servicenow.com/docs/MlgerQaT2zGqAEISZUe4_w#p_AJAX "AJAX (asynchronous JavaScript and XML) is a group of interrelated, client-side development techniques used to create asynchronous Web applications.").

System script include
:

        // Be sure the Glide AJAX enabled option is checked
         
        var MyDateTimeAjax = Class.create();
        MyDateTimeAjax.prototype = Object.extendsObject(AbstractAjaxProcessor,{
          nowDateTime:function(){
            return gs.nowDateTime();}});

## Toggle the timer field by field name {#r_UsefulFieldScripts__section_xzg_mvx_mtb}

The following client script toggles the timer field based on a particular field name.

    function toggleTimerByFieldName(fieldName){
     //Step 1: Find the timer object
     //timeObjectName: the timer objects name as it would normally be referenced
     //timeObjectHidden: the hidden input node in the field td
     //timeObjectParent: the parent td node containing the field and it's constituent nodes
     //timeObjectFields: anchor tag with onclick to stop timer
     
     var timeObjectName = fieldName;
     var timeObjectHidden = gel(timeObjectName);
     
     //Step 2: simulate click stop button
     var timeObjectParent;
     var timeObjectFields;
     
     //verify that we got the correct object
     if(timeObjectHidden.type=="hidden"){
     
        //Get Parent td node
        timeObjectParent = timeObjectHidden.parentNode;
     
        //Get input fields
        timeObjectFields = timeObjectParent.getElementsByTagName("input");
     
        //simulate click of stop button
        var timerTestString ="paused";
        var timerImg;
     
        //loop through input objects looking for the pause timer object
        for(var elIt=0; elIt < timeObjectFields.length; elIt++){
          if(timeObjectFields[elIt].id.match(timerTestString)){
            if(timeObjectFields[elIt].value=="false"){
              timeObjectFields[elIt].value="true";
              timerImg = timeObjectParent.getElementsByTagName("img")[0];
              timerImg.src="images/timer_start.gifx";}
          elseif(timeObjectFields[elIt].value=="true"){
              timeObjectFields[elIt].value="false";
              timerImg = timeObjectParent.getElementsByTagName("img")[0];
              timerImg.src="images/timer_stop.gifx";}}}}}

## Modify GlideDateTime field values {#r_UsefulFieldScripts__section_mod-gdt-fields}

The following server-side script example shows how to modify values using the GlideDateTime API. The same concept also applies to the GlideDate object.  
Note:  
The following script is only intended for global applications.

    //You first need a GlideDateTime object
    //this can be from instantiating a new object "var gdt = new GlideDateTime()"
    //or getting the object from a GlideDateTime field
    //getting the field value (for example: var gdt = current.start_date) only returns the string value, not the object
    //to get the object use var gdt = current.start_date.getGlideObject(); (GlideElement)
    //now gdt is a GlideDateTime object
    var gdt = current.start_date.getGlideObject();
     
    //All methods can use negative values to subtract intervals
     
    //add 1 hour (60 mins * 60 secs)
    gdt.addSeconds(3600);
     
    //add 1 day
    gdt.addDaysLocalTime(1);
     
    //subtract 1 day
    gdt.addDaysLocalTime(-1);
     
    //add 3 weeks
    gdt.addWeeksLocalTime(3);
     
    //subtract 6 months
    gdt.addMonthsLocalTime(-6);
     
    //add 1 year, representing the date and time using the UTC timezone instead of the local user's timezone.
    gdt.addYearsUTC(1);
     
    //set the value of the GlideDateTime object to the current session timezone/format
    GlideSession.get().setTimeZoneName('US/Eastern');
    gdt.setDisplayValue('2018-2-28 00:00:00');
    gs.info('In ' + GlideSession.get().getTimeZoneName() + ": " + gdt.getDisplayValue());

See also:

* [GlideDateTime](https://www.servicenow.com/docs/1DG2puD64e_Jpggk_TuPZw#c_GlideDateTime "The GlideDateTime class provides methods for performing operations on GlideDateTime objects, such as instantiating GlideDateTime objects or working with glide_date_time fields.")
* [GlideDate - Global](https://www.servicenow.com/docs/F6Psdnlh5KAX_zOXR3JHYA#GlideDateAPI "The GlideDate class provides methods for performing operations on GlideDate objects, such as instantiating GlideDate objects or working with GlideDate fields.")
* [GlideDate - Scoped](https://www.servicenow.com/docs/Wn1IkfgXsee2gtBqDJLACw#c_GlideDateScopedAPI "The scoped GlideDate class provides methods for performing operations on GlideDate objects, such as instantiating GlideDate objects or working with GlideDate fields.")
* [GlideDateTime - Global](https://www.servicenow.com/docs/0RsFUGrNm~~bAxNQ4aduzg#c_GlideDateTimeAPI "The GlideDateTime class provides methods for performing operations on GlideDateTime objects.")
* [GlideDateTime - Scoped](https://www.servicenow.com/docs/F2MUtxAxGDjJO4slnrcidA#c_GlideDateTimeScoped "The scoped GlideDateTime class provides methods for performing operations on GlideDateTime objects.")
* [GlideElement - Global](https://www.servicenow.com/docs/dn_Ga0HBQ0kbXyXdUHcVKw#c_GlideElementAPI "The GlideElement API provides a number of convenient script methods for dealing with fields and their values. GlideElement methods are available for the fields of the current glide record.")
* [GlideElement - Scoped](https://www.servicenow.com/docs/n4FSgCkxOii7rIaF5cOhDg#c_GlideElementScopedAPI "The scoped GlideElement API provides a number of convenient script methods for dealing with fields and their values. Scoped GlideElement methods are available for the fields of the current glide record.")
* [GlideTime - Scoped](https://www.servicenow.com/docs/3YinW70JiEtI0ZBLtUnm5A#c_GlideTimeScopedAPI "The GlideTime API provides methods for performing operations on GlideTime objects, such as instantiating GlideTime objects or working with GlideTime fields.")
{#r_UsefulFieldScripts__ul_l51_1xl_cjc}
* **[Approval assignment scripts](https://www.servicenow.com/docs/xaVJRfVpXLiXsQWMwtKOHw)**   
  This is a searchable version of the useful approval and assignment scripts.

