Skip to content

Commit ce2837f

Browse files
authored
Set and lock variable by group (#2185)
* Create set_lock_variable_by_grp.js * Create README.md
1 parent 2fa512a commit ce2837f

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
**Set and Lock Variable by Group**
2+
3+
This solution provides a secure and dynamic way to control data entry on a Service Catalog form based on the user's group membership. It is typically used to pre-fill and lock certain justification or approval bypass fields for authorized users (like managers or executive staff), improving their efficiency while maintaining an accurate audit trail.
4+
5+
This functionality requires a combined Client-side (Catalog Client Script) and Server-side (Script Include) approach to ensure the group check is done securely.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// onload Catalog Client Script with Catalog Name
2+
function onLoad() {
3+
var variableName = 'bypass_approval_reason';
4+
var targetGroupName = 'ServiceNow Support'; // The group authorized to skip this step
5+
var ga = new GlideAjax('UserUtils');
6+
ga.addParam('sysparm_name', 'isMemberOf');
7+
ga.addParam('sysparm_group_name', targetGroupName);
8+
ga.getXMLAnswer(checkAndLockVariable);
9+
function checkAndLockVariable(response) {
10+
var isMember = response;
11+
if (isMember == 'true') {
12+
var message = 'Value set and locked due to your ' + targetGroupName + ' membership.';
13+
var setValue = 'Bypassed by authorized ' + targetGroupName + ' member.';
14+
g_form.setValue(variableName, setValue);
15+
g_form.setReadOnly(variableName, true);
16+
g_form.showFieldMsg(variableName, message, 'info');
17+
} else {
18+
g_form.setReadOnly(variableName, false);
19+
}
20+
}
21+
}
22+
23+
//Script Include
24+
var UserUtils = Class.create();
25+
UserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
26+
isMemberOf: function() {
27+
var groupName = this.getParameter('sysparm_group_name');
28+
var isMember = gs.getUser().isMemberOf(groupName);
29+
return isMember.toString();
30+
},
31+
32+
type: 'UserUtils'
33+
});

0 commit comments

Comments
 (0)