Useful field scripts

This is a searchable version of the useful field customization scripts.

Caution: The customization described here was developed for use in specific instances, and is not supported by ServiceNow Customer 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 an easy-to-navigate version, visit the Useful Scripts portal.

AKA Incident Template, Auto Assignments, Quick Calls, Call Script, Auto Populate

Let's say you want to auto-fill your Short Description based on the selected Subcategory. First, create a lookup table, then populate the key field, in this case the Subcategory and the auto-filled field, Short Description. So let's say your table had 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',"");
              }
     }
}

You could populate multiple fields or even pull Call Script questions into the Comments field so call center personnel gather good information to pass on to a technician. There are already Assignment Rules, Templates, and Wizards built in that perform similar functions.

Disable HTML tags in descriptions

Description: This code disables HTML tags in descriptions and short descriptions by substituting the tags with harmless versions that won't execute.
 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

Table: sys_user

Description: This example of the script trims trailing and leading spaces in the FirstName and LastName fields of sys_user.
doit();
 
function doit(){ 
  var 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

Type: Client script

Description: The following example is for the number field on incident. The label will flash for two seconds:
g_form.flash("incident.number","#FFFACD",0);
The arguments for the flash method are as follows:
  1. tablename.fieldname
  2. RGB color or acceptable CSS color like "blue" or "tomato"
  3. integer that determines how long the label will flash:
  • Use 2 for a 1-second flash
  • Use 0 for a 2-second flash
  • Use -2 for a 3-second flash
  • Use -4 for a 4-second flash

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

Make field label bold

Type: Client script

Description: This script makes the label of a particular field (in this case, Short Description on the Incident Table) bold.
functiononLoad(){
var l = g_form.getLabel('incident.short_description');
l.style.fontWeight='bold';}

Make fields read-only

Type: Client script

Table: Incident

Description: This onLoad client script makes fields read-only. For this example, the script makes the following fields on the Incident table read-only: Incident state, Impact, Urgency, Priority, Configuration item, and Assigned to. It also removes the magnifying glass for the read-only Reference Fields (Configuration item and Assigned to).
functiononLoad(){
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

Type: Client script

Description: You can use the following two lines to set the current date and time in a date/time field. This bypasses the problem of getting the value into the proper format and proper timezone.
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 "Client callable" checkbox is checked
 
var MyDateTimeAjax =Class.create();
MyDateTimeAjax.prototype= Object.extendsObject(AbstractAjaxProcessor,{
  nowDateTime:function(){
    return gs.nowDateTime();}});

Toggle timer field by field name

Type: Client script

Description: 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 value

Type: A server side script that accesses a GlideDateTime field.

Description: Given a GlideDateTime field or script object, show a variety of ways to easily modify value. The same concept also applies to the GlideDate object.
//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();
//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.addSecondsLocalTime(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);