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());}); - 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 value
The following example uses a server-side script to access a GlideDateTime field.
The following server-side script example shows how to modify values using the
GlideDateTime API. 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);