Manipulate ServiceNow Data
Quick start
Querying records (traditional):
var gr = new GlideRecord('incident');
gr.addQuery('state', 'Open');
gr.addQuery('priority', '<=', 2);
gr.orderBy('created_on');
gr.query();
while (gr.next()) {
gs.info('Incident: ' + gr.getValue('number'));
}
Modern fluent queries:
var records = new global.GlideQuery('incident')
.where('active', true)
.where('priority', '<=', 2)
.select();
for (var i = 0; i < records.length; i++) {
var incident = records[i];
}
Aggregating data:
var agg = new GlideAggregate('incident');
agg.addAggregate('COUNT');
agg.addAggregate('SUM', 'time_worked');
agg.query();
while (agg.next()) {
var count = agg.getAggregate('COUNT');
var total = agg.getAggregate('SUM');
}
Secure access (with ACL enforcement):
var gr = new GlideRecordSecure('confidential_table');
gr.query();
// Only returns records user has permission to see
Performance patterns
| Pattern | Use Case | Performance |
|---|---|---|
setLimit(1) | Existence check | Fast |
getValue('field') | Get single value | No dot-walk overhead |
GlideAggregate | Count/Sum | Much faster than loop |
addEncodedQuery() | Complex filters | Copy from list view |
Best practices
- Use
GlideQueryfor new code (modern, fluent) - Use
GlideRecordfor complex queries and CRUD operations - Never iterate to count; use
GlideAggregateinstead - Use
getValue()instead of dot-walking for performance - Use
GlideRecordSecurewhen ACLs matter - Use
setLimit(1)for existence checks - Copy
encodedQueryfrom list views for complex filters - Test queries on sub-production before production
- Refactor repeated query logic into Script Includes
- Always check if record exists with
next()before accessing
Key APIs
| API | Purpose |
|---|---|
| GlideRecord | CRUD operations, traditional |
| GlideQuery | NEW - fluent, modern queries |
| GlideAggregate | Counts, sums, aggregations |
| GlideRecordSecure | ACL-enforced queries |
| GlideFilter | Advanced filtering operations |
Reference
For Performance optimization, decision matrices, and anti-patterns, see BEST_PRACTICES.md
