
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
NOTE: MY POSTINGS REFLECT MY OWN VIEWS AND DO NOT NECESSARILY REPRESENT THE VIEWS OF MY EMPLOYER, ACCENTURE.
DIFFICULTY LEVEL: BEGINNER
Assumes basic knowledge and/or familiarity of Scripting in ServiceNow.
____________________________________________________________________________
Continuing on from my previous article: GlideQuery vs. GlideRecord: A Comparison - Part 1
Picking up where I left off I am continuing to pull GlideRecord examples from my article: Community Code Snippets: A GlideRecord Survey - Part 1 (Beginner)
Case 5: BETWEEN Operator
// 0.033 - 5 records returned
var servers = new GlideRecord('cmdb_ci_server');
servers.addQuery('cpu_count', '>=', 2);
servers.addQuery('cpu_count', '<=', 5);
servers.query();
while (servers.next()) {
gs.info('---> Server Name: ' + servers.getValue('name'));
}
// 0.011 - Very fast!
var servers = new GlideRecord('cmdb_ci_server');
// not super intuitive
servers.addQuery('cpu_count', 'BETWEEN', '2@5');
servers.query();
while (servers.next()) {
gs.info('---> Server name: {0}, count: {1}',
[servers.getValue('name'), servers.getValue('cpu_count')]);
}
// 0.040
new GlideQuery('cmdb_ci_server')
.where('cpu_count','>=',2)
.where('cpu_count','<=',4)
.select('name')
.forEach(function (servers) {
gs.info('---> Server Name: {0}', [servers.name]);
});
// Alternative 0.057
new GlideQuery('cmdb_ci_server')
.where('cpu_count','BETWEEN',[2,4])
.select('name')
.forEach(function (servers) {
gs.info('---> Server Name: {0}', [servers.name]);
});
Case 6: OR Command
// 0.040
// From the list view add the form_factor field.
// set the form_factor on a couple of records. A few for desktop, a few for laptop
var computers = new GlideRecord('cmdb_ci_computer');
computers.addQuery('form_factor', 'desktop')
.addOrCondition('form_factor', 'laptop');
computers.setLimit(10);
computers.query();
while (computers.next()) {
gs.info('---> name: {0}, serial_number: {1}, form_factor: {2}',
[computers.getValue('name'),
computers.getValue('serial_number'),
computers.getValue('form_factor')]
);
}
// 0.039
// I always like using the IN operator for two or more values. It seriously uncomplexes the query.
var formFactorList = ['desktop','laptop'];
var computers = new GlideRecord('cmdb_ci_computer');
computers.addQuery('form_factor', 'IN', formFactorList)
computers.setLimit(10);
computers.query();
while (computers.next()) {
gs.info('---> name: {0}, serial_number: {1}, form_factor: {2}',
[computers.getValue('name'),
computers.getValue('serial_number'),
computers.getValue('form_factor')]
);
}
// 0.049
new GlideQuery('cmdb_ci_computer')
.where('form_factor','Desktop')
.orWhere('form_factor','Laptop')
.select('name', 'serial_number', 'form_factor')
.forEach(function (computers) {
gs.info('---> name: {0}, serial_number: {1}, form_factor: {2}',
[computers.name,
computers.serial_number,
computers.form_factor]
);
});
// Alternative 0.046
var formFactorList = ['desktop','laptop'];
new GlideQuery('cmdb_ci_computer')
.where('form_factor','IN',formFactorList)
.select('name', 'serial_number', 'form_factor')
.forEach(function (computers) {
gs.info('---> name: {0}, serial_number: {1}, form_factor: {2}',
[computers.name,
computers.serial_number,
computers.form_factor]
);
});
Case 7: GroupBy
// 0.047
var formFactorList = ['desktop','laptop'];
var computers = new GlideRecord('cmdb_ci_computer');
computers.addQuery('form_factor', 'IN', formFactorList)
computers.groupBy('form_factor')
computers.query();
while (computers.next()) {
gs.info('---> name: {0}\t\tserial number: {1}\t\tform factor: {2}',
[computers.getValue('name'), computers.getValue('serial_number'), computers.form_factor]);
}
Case 8: WHERE Dot-walk
// 0.211
// Note I deliberately did not use .updateMultiple()
var computers = new GlideRecord('cmdb_ci_computer');
computers.addQuery('manufacturer.name', 'apple');
computers.addNullQuery('form_factor');
computers.setLimit(10);
computers.query();
while (computers.next()) {
gs.info('---> BEFORE. name: {0}\t\tserial number: {1}\t\tform factor: {2}',
[computers.getValue('name'), computers.getValue('serial_number'), computers.form_factor]);
computers.form_factor = 'Laptop';
gs.info('---> AFTER. name: {0}\t\tserial number: {1}\t\tform factor: {2}',
[computers.getValue('name'), computers.getValue('serial_number'), computers.form_factor]);
computers.update(); // test first before making the update!!!
}
// 0.186
// More optimized version
var computers = new GlideRecord('cmdb_ci_computer');
computers.addQuery('manufacturer.name', 'apple');
computers.addNullQuery('form_factor');
computers.setLimit(10);
computers.query();
computers.form_factor = 'Laptop';
computers.updateMultiple();
// 0.261 - meh
// This method worked fine, but there is a better way.
var computerList = [];
var computers = new GlideQuery('cmdb_ci_computer')
.where('manufacturer.name', 'Apple')
.whereNull('form_factor')
.limit(10)
.select()
.forEach(function (computer) {
computerList.push(computer.sys_id)
});
var updatePayload = {form_factor:'Laptop'};
var updatedComputers = new GlideQuery('cmdb_ci_computer')
.where('sys_id','IN',computerList)
.updateMultiple(updatePayload);
gs.info(JSON.stringify(updatedComputers));
// 0.153 - so wicked fast in comparison to GlideRecord! What the!
// more elegant by far!
var updatePayload = {form_factor:'Laptop'};
var updatedComputers = new GlideQuery('cmdb_ci_computer')
.where(
new GlideQuery()
.where('manufacturer.name', 'Apple')
.whereNull('form_factor')
)
.limit(10)
.updateMultiple(updatePayload);
gs.info(JSON.stringify(updatedComputers));
Don't forget to check out my comprehensive list of articles here: Link
Enjoy! More to come!
Steven Bell.
If you find this article helps you, don't forget to log in and mark it as "Helpful"!
- 1,989 Views
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.