Possible productivity enhancements via GlideRecord extension methods/properties
We have a team of developers building catalog items. As I review the code that they are writing, I'm finding that much of it is extremely repetitive. We've built out a library of Script includes to support common operations, but I was brainstorming some ways to accelerate development with some "syntactic sugar". Granted, it's only a couple of lines difference when you consider that we already have script includes to do these things, but I personally find that little stuff like this "breaks my flow".
This idea was not universally well-received on our dev team, so I'm looking for some feedback from the community. sabell2012 I would appreciate your feedback.
Here they are:
1. The currentUser property gives you instant access to any property on the current user.
GlideRecord.prototype.currentUser = (function () {
var gr = new GlideRecord('sys_user');
if (gr.get(new GlideSystem().getUserID())) {
return gr;
}
})();
var gr = new GlideRecord('sc_task');
gr.addQuery('assigned_to.email', gr.currentUser.email); //Yes, this is contrived. We could have just used the sys_id
gr.query();
while (gr.next()) {
//Do something awesome here
}
2. The getUser method gives you quick access to properties on any user where you have the sys_id, the user_name or the email.
GlideRecord.prototype.getUser = function () {
var gr = new GlideRecord('sys_user');
gr.addEncodedQuery('sys_id=' + arguments[0] + 'ORuser_name=' + arguments[0] + 'ORemail=' + arguments[0]);
gr.query();
if (gr.next()) {
return gr;
}
};
//Assuming that we're in a workflow on a catalog item
var gr = new GlideRecord('incident');
gr.addQuery('assignment_group.manager.email', gr.getUser(current.variables.requestedfor).email);//This is contrived. Email is not necessary
gr.query();
while (gr.next()) {
//Do something awesome here
}
// From an INC Business Rule
var gr = new GlideRecord('sys_email');
gr.addQuery('recipients', 'CONTAINS', gr.getUser(current.assignedto).email);
gr.addQuery('subject', 'CONTAINS', current.number);
gr.query();
while (gr.next()) {
//Do something awesome here
}
3. currentUserGroups gives quick access to a list of the current user's groups.urrent
UserGrcuoup
GlideRecord.prototype.currentUserGroups = (function () {
var grps = {};//object keys are unique so we use it to avoid duplication of ids
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('user', new GlideSystem().getUserID());
gr.query();
while (gr.next()) {
grps[gr.group.sys_id.toString()] = true;
}
var ret = '';
for (var k in grps) {
ret += k + ',';
}
ret = ret.slice(0, -1);//remove the final comma
return ret;
})();
var g = new GlideRecord('sys_user_grmember'); //Another highly contrived example. It shows the group names for the current user. g.addQuery('user', g.currentUser.sys_id);
g.addQuery('group', 'IN', g.currentUserGroups);
g.query();
https://www.servicenow.com/community/north-texas-snug/possible-productivity-enhancements-via-gliderecord-extension/ba-p/2285403