GlideQuery from Quebec is now installed by default on every ServiceNow instance.
This is a short cheat sheet to make the best use of it. All examples use the tables of the ITBM module.
These are the main sources of information used:
Overview of GlideQuery by Samuel Meylan and his cheat sheet
ServiceNow Developer blog post made by Peter Bell, creator of GlideQuery
Read records
var gqProjects = new GlideQuery('pm_project')
.where('project_manager.user_name', 'paul.martin')
.select('short_description', 'number', 'goals$DISPLAY','cost$CURRENCY_DISPLAY')
.forEach(function (project) {
gs.info('Project ' + project.short_description + '; number ' + project.number + '; Planned cost ' + project.cost$CURRENCY_DISPLAY + '; goals: ' + project.goals$DISPLAY);
});
Read only one record
var gqSingleProject = new GlideQuery('pm_project')
.where('number', 'PRJ0010383')
.selectOne('short_description', 'number', 'goals$DISPLAY', 'cost$CURRENCY_DISPLAY')
.ifPresent(function (project) {
gs.info('Project ' + project.short_description + '; number ' + project.number + '; Planned cost ' + project.cost$CURRENCY_DISPLAY + '; goals: ' + project.goals$DISPLAY);
});
Read records with complex where and or conditions
var gqActualsByPortfolios = new GlideQuery('pm_project')
.where('active', true)
.where('phase', '!=', 'closing')
.whereNotNull('primary_portfolio')
.where(new GlideQuery()
.where('duration', '>', '100 00:00:00')
.orWhere('department.name', 'Engineering')
)
.groupBy('primary_portfolio.name')
.aggregate('sum', 'work_cost')
.having('sum', 'work_cost', '>', 100)
.select()
.forEach(function (actualsByPortfolio) {
gs.info(JSON.stringify(actualsByPortfolio));
});
Check if record exist
var gqProjectExists = new GlideQuery('pm_project')
.where('number', 'PRJ0010383')
.selectOne()
.isPresent();
gs.info('Project exist? ' + gqProjectExists);
Create record and return sys_id
var projectObject = {
short_description: 'New Project',
description: 'Please help!',
};
var gqCreateProject = new GlideQuery('pm_project')
.insert(projectObject)
.get();
gs.info(JSON.stringify(gqCreateProject));
Update multiple
var gqUpdateProjects = new GlideQuery('pm_project')
.where('department.name', 'Facilities')
.updateMultiple({
priority: 2
});
gs.info(JSON.stringify(gqUpdateProjects));
Delete
var gqDeleteProjects = new GlideQuery('pm_project')
.where('department.name', 'Facilities')
.deleteMultiple();
Example of filter and result manipulation
var gqProjects = new GlideQuery('pm_project')
.whereNotNull('goals')
.select('short_description', 'number', 'goals', 'goals$DISPLAY', 'percent_complete')
.filter(function (project) {
return project.goals.indexOf(",") != -1;
})
.map(function (project) {
var roundedPercent = Math.round(project.percent_complete)
var nameUpperCase = project.short_description.toUpperCase();
return nameUpperCase + '. Percent complete ' + roundedPercent + '%.' + project.goals$DISPLAY;
})
.forEach(function (project) {
gs.info(project);
});
Aggregation
var projectsEconomics = new GlideQuery('pm_project')
.aggregate('count')
.aggregate('max', 'cost')
.aggregate('sum', 'cost')
.aggregate('max', 'budget_cost')
.aggregate('sum', 'budget_cost')
.groupBy('primary_portfolio.name')
.groupBy('primary_program.short_description')
.select()
.forEach(function (projectEconomics) {
gs.debug(JSON.stringify(projectEconomics));
});