GlideRecord Cheat Sheet
Below is a list of commonly used GlideRecord code that you can come back to daily while writing scripts in ServiceNow.
The examples are in no specific order - so just ctrl+f or cmd+f and search to find what you need!
Query
Basic GlideRecord query
var gr = new GlideRecord('incident');
gr.addQuery('active', true);
gr.query();
while(gr.next()) {
gs.log('Category is ' + gr.category);
}
Get (sys_id)
Get a single GlideRecord with sys_id. A great way to return a single record when you know the sys_id of that record.
var gr = new GlideRecord('incident');
gr.get('sys_id'); // pass in the sys_id of the record you want
//Do something with the record returned
if(gr.category == 'hardware'){
gs.log('Category is ' + gr.category);
}
OR
The standard ‘addQuery’ parameter acts like an ‘and’ condition in your query. This example shows how you can add ‘or’ conditions to your query.
var gr = new GlideRecord('incident');
var orGr = gr.addQuery('state', 6);
orGr.addOrCondition('state', 7);
gr.query();
while(gr.next()) {
gs.log('Category is ' + gr.category);
}
OR (the simple way)
In addition to the example above this, you can also chain your ‘OR’ condition like below, which is usually simpler
//Find all incidents with a priority of 1 or 2
var gr = new GlideRecord('incident');
gr.addQuery('priority', 1).addOrCondition('priority', 2);
gr.query();
Insert
Insert a new record
//Create a new Incident record and populate the fields with the values below
var gr = new GlideRecord('incident');
gr.initialize();
gr.short_description = 'Wifi problem';
gr.category = 'network';
gr.caller_id.setDisplayValue('Steph Curry');
gr.insert();
Update
Update one or many records by querying the records, setting the values on the records, and then calling .update();
//Find all active incident records and make them inactive
var gr = new GlideRecord('incident');
gr.addQuery('active',true);
gr.query();
while (gr.next()) {
gr.active = false;
gr.update();
}
Delete
Delete one or many records by querying for the records and then calling the .deleteRecord() method
//Find all inactive incident records and delete them one-by-one
var gr = new GlideRecord('incident');
gr.addQuery('active',false);
gr.query();
while (gr.next()) {
//Delete each record in the query result set
gr.deleteRecord();
}
deleteMultiple (shortcut)
If you are deleting multiple records then the ‘deleteMultiple’ method can be used as a shortcut
//Find all inactive incidents and delete them all at once
var gr = new GlideRecord('incident');
gr.addQuery('active', false);
gr.deleteMultiple(); //Deletes all records in the record set
addEncodedQuery
Encoded query strings can be copied directly from a filter, by right-clicking on the breadcrumbs
var gr = new GlideRecord('incident');
gr.addEncodedQuery('active=true^state=2'); // Encoded query
gr.query();
while(gr.next()) {
gs.log('Category is ' + gr.category);
}
GlideAggregate
Aggregates include COUNT, SUM, MIN, MAX, AVG
//Find all active incidents and log a count of records to the system log
var gr = new GlideAggregate('incident');
gr.addQuery('active', true);
gr.addAggregate('COUNT');
gr.query();
var incidents = 0;
if (gr.next()){
incidents = gr.getAggregate('COUNT');
gs.log('Active incident count: ' + incidents);
}
orderBy/orderByDesc
Order the results of your recordset by using ‘orderBy’ and/or ‘orderByDesc’ as shown below.
//Find all active incidents and order the results ascending by category then descending by created date
var gr = new GlideRecord('incident');
gr.addQuery('active', true);
gr.orderBy('category');
gr.orderByDesc('sys_created_on');
gr.query();
addNullQuery
Used to search for empty values
//Find all incidents where the Short Description is empty
var gr = new GlideRecord('incident');
gr.addNullQuery('short_description');
gr.query();
addNotNullQuery
Used to search for not empty values
//Find all incidents where the Short Description is not empty
var gr = new GlideRecord('incident');
gr.addNotNullQuery('short_description');
gr.query();
getRowCount
Used to get the number of results returned. Not available client-side.
//Log the number of records returned by the query
var gr = new GlideRecord('incident');
gr.addQuery('category', 'software');
gr.query();
gs.log('Incident count: ' + gr.getRowCount());
‘getRowCount’ isn’t available client-side, however you can return the number of results in a client-side GlideRecord query by using ‘rows.length’ like below:
//Log the number of records returned by the query
var gr = new GlideRecord('incident');
gr.addQuery('category', 'software');
gr.query();
alert('Incident count: ' + gr.rows.length);
setLimit
Used to limit the number of results returned
//Find the last 10 incidents created
var gr = new GlideRecord('incident');
gr.orderByDesc('sys_created_on');
gr.setLimit(10);
gr.query();
chooseWindow
ChooseWindow will return all records between the first parameter(inclusive) and the second parameter(exclusive), so this example will return the 10 incidents between record 10-19 both inclusive. Works with orderBy
//Limit the query to 10 incidents
var gr = new GlideRecord('incident');
gr.chooseWindow(10, 20);
gr.query();
setWorkflow
Used to enable or disable the triggering of Business Rules
var gr = new GlideRecord('incident');
gr.addNullQuery('short_description');
gr.query();
while(gr.next()){
gr.short_description = 'Must be the printers that are broken again...';
gr.setWorkflow(false); //Disable business rules for this query
gr.update();
}
autoSysFields
Used to prevent updating fields such as sys_updated_on, sys_updated_by, and other 'sys' fields
//Change the category of all 'software' incidents to 'hardware' without updating sys fields
var gr = new GlideRecord('incident');
gr.addQuery('category', 'software');
gr.query();
while(gr.next()){
gr.category = 'hardware';
gr.autoSysFields(false);
gr.update();
}
setForceUpdate
Used to force an update, even when no fields are changed, and thus force the update to execute
var gr = new GlideRecord('incident');
gr.query();
while(gr.next()) {
gr.setForceUpdate(true); // Force an update even with no changes
gr.update();
}
setAbortAction
Sets the next database operation to be aborted. Useful to prevent updates if specific criteria is met.
//Standard date comparison of a start date that must be set before an end date
if ((!current.u_date1.nil()) && (!current.u_date2.nil())) {
var start = current.u_date1.getGlideObject().getNumericValue();
var end = current.u_date2.getGlideObject().getNumericValue();
if (start > end) {
gs.addInfoMessage('Start must be before end');
current.u_date1.setError('Start must be before end');
current.setAbortAction(true);
}
}
List of Operators
These operators can be used in addition to the standard field/value query searching shown above…
// =
//Equals (this is the same as not including the 3rd parameter)
addQuery('priority', '=', 1);
// >
//Greater than
addQuery('priority', '>', 1);
// <
//Less than
addQuery('priority', '<', 1);
// >=
//Greater than or equals
addQuery('priority', '>=', 1);
// <=
//Less than or equals
addQuery('priority', '<=', 1);
// !=
//Not equals
addQuery('priority', '!=', 1);
// STARTSWITH
//Field must start with value
addQuery('short_description', 'STARTSWITH', 'Printer');
// ENDSWITH
//Field must end with value
addQuery('short_description', 'ENDSWITH', 'Printer');
// CONTAINS
//Field must contain value somewhere
addQuery('short_description', 'CONTAINS', 'Printer');
// DOES NOT CONTAIN
//Field must not contain value anywhere
addQuery('short_description', 'DOES NOT CONTAIN', 'Printer');
// IN
//Field must be found somewhere in the value
addQuery('sys_id', 'IN', '8d641046c0a80164000bc7c0d3ed46a0,a9a16740c61122760004fe9095b7ddca');
// INSTANCEOF
//Return only records that are instances of an extended table (like incident is of task in this example)
addQuery('sys_class_name', 'INSTANCEOF', 'incident');
Thanks for using our GlideRecord Cheat Sheet!
Looking for something else? Check out our other Cheat Sheets below!
Credit: ServiceNow Guru