- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-18-2021 11:02 PM
When a sys_user record is created, I would like the user to be belonged to the corresponding Group(sys_user_group) based on "u_privilege" field value as below.
u_privilege = 3 --> Add the user to Group-3
u_privilege = 2 --> Add the user to Group-2
u_privilege = 1 --> Add the user to Group-1
Also, when the value of u_privilege is changed, the user needs to be removed from the old Group and then added to the new Group as below.
e.g. When the value of "u_privilege" is changed from 3 to 2, that user should be removed from Group-3 and then added to Group-2.
I think that one or two Business Rules needed, but could someone please give me the sample script for this requirements?
Best Regards,
Aki
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-19-2021 12:26 AM
Hi Aki,
I tried with two BR's, something like below
When User Created:
before insert BR
Condition:
current.u_privilege!="" //map your field name
(function executeRule(current, previous /*null when async*/ ) {
var grU = new GlideRecord('sys_user');
grU.addQuery('sys_id', current.sys_id);
grU.query();
if (!grU.next()) {
var privilege = current.u_privilege;
var grp = new GlideRecord('sys_user_grmember');
grp.initialize();
grp.user = current.sys_id;
if (privilege == 'p1') {
grp.group = '019ad92ec7230010393d265c95c260dd'; //Analytics Settings Managers
} else if (privilege == 'p2') {
grp.group = '0a52d3dcd7011200f2d224837e6103f2'; //Application Development
} else if (privilege == 'p3') {
grp.group = '0c4e7b573b331300ad3cc9bb34efc461'; //Problem Analyzers
}
grp.insert();
}
})(current, previous);
Now when changing to value of the privilege:
When to run: After update BR
Filter Condition Priority Changes
(function executeRule(current, previous /*null when async*/ ) {
var enc = "group=019ad92ec7230010393d265c95c260dd^ORgroup=0c4e7b573b331300ad3cc9bb34efc461^ORgroup=0a52d3dcd7011200f2d224837e6103f2";
var grM = new GlideRecord('sys_user_grmember');
grM.addQuery('user', current.sys_id);
grM.addEncodedQuery('enc'); //change your encoded query like Grp 1 is or Grp2 is or Grp3
grM.query();
if (grM.next()) {
grM.deleteRecord();
}
var privilege = current.u_privilege;
var grp = new GlideRecord('sys_user_grmember');
grp.initialize();
grp.user = current.sys_id;
if (privilege != '') {
if (privilege == 'p1') {
grp.group = '019ad92ec7230010393d265c95c260dd'; //Grp1
} else if (privilege == 'p2') {
grp.group = '0a52d3dcd7011200f2d224837e6103f2'; //Grp2
} else if (privilege == 'p3') {
grp.group = '0c4e7b573b331300ad3cc9bb34efc461'; //Grp3
}
grp.insert();
}
})(current, previous);
Hope it helps.
Thanks,
Murthy
Murthy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-19-2021 12:26 AM
Hi Aki,
I tried with two BR's, something like below
When User Created:
before insert BR
Condition:
current.u_privilege!="" //map your field name
(function executeRule(current, previous /*null when async*/ ) {
var grU = new GlideRecord('sys_user');
grU.addQuery('sys_id', current.sys_id);
grU.query();
if (!grU.next()) {
var privilege = current.u_privilege;
var grp = new GlideRecord('sys_user_grmember');
grp.initialize();
grp.user = current.sys_id;
if (privilege == 'p1') {
grp.group = '019ad92ec7230010393d265c95c260dd'; //Analytics Settings Managers
} else if (privilege == 'p2') {
grp.group = '0a52d3dcd7011200f2d224837e6103f2'; //Application Development
} else if (privilege == 'p3') {
grp.group = '0c4e7b573b331300ad3cc9bb34efc461'; //Problem Analyzers
}
grp.insert();
}
})(current, previous);
Now when changing to value of the privilege:
When to run: After update BR
Filter Condition Priority Changes
(function executeRule(current, previous /*null when async*/ ) {
var enc = "group=019ad92ec7230010393d265c95c260dd^ORgroup=0c4e7b573b331300ad3cc9bb34efc461^ORgroup=0a52d3dcd7011200f2d224837e6103f2";
var grM = new GlideRecord('sys_user_grmember');
grM.addQuery('user', current.sys_id);
grM.addEncodedQuery('enc'); //change your encoded query like Grp 1 is or Grp2 is or Grp3
grM.query();
if (grM.next()) {
grM.deleteRecord();
}
var privilege = current.u_privilege;
var grp = new GlideRecord('sys_user_grmember');
grp.initialize();
grp.user = current.sys_id;
if (privilege != '') {
if (privilege == 'p1') {
grp.group = '019ad92ec7230010393d265c95c260dd'; //Grp1
} else if (privilege == 'p2') {
grp.group = '0a52d3dcd7011200f2d224837e6103f2'; //Grp2
} else if (privilege == 'p3') {
grp.group = '0c4e7b573b331300ad3cc9bb34efc461'; //Grp3
}
grp.insert();
}
})(current, previous);
Hope it helps.
Thanks,
Murthy
Murthy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-19-2021 05:48 AM
Hi Murthy,
Thank you so much for your script. After making a small change to the script, it worked perfectly!
Really appreciate it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-19-2021 06:56 AM
Thanks Aki.
Glad to help 🙂
-Murthy
Murthy
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-19-2021 01:27 AM
Hi,
you can use 2 BR
1) after insert to add user to correct group
2) after update when u_privilege is Changed to remove user from previous group since you know the earlier value of u_privilege and then add to new group.
where re you stuck?
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader