Skip to content
Release: Australia · Updated: 2026-03-12 · Official documentation · View source

Field script use cases

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.

For more information, see Server API reference.

Automatically populate a field

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
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

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

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

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

Note: Do not specify this argument if you want the field label colored the specified color.

Make a field label bold

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

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

  • Incident state
  • Impact
  • Urgency
  • Priority
  • Configuration item
  • Assigned to

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

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.

  • 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

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

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:

Parent Topic:Useful scripts