- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-28-2023 02:30 PM
Been trying and failing at scripting this business rule, so I'm here for help.
I have a customer field on the group table "u_supervisors" that is a list field referencing the user table. On a group record, whenever a user is added to this list field, I want them automatically added to the Group Member related list ("sys_user_grmember") of this group. So far I had the business rule triggering when Supervisors changes, after update.
My script doesnt seem to do anything, any help appreciated:
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-29-2023 03:06 AM
Hi @RWHeals ,
As I understand you will want to adjust (add or remove) members from the group whenever Supervisors field get changes, correct?
How about if the member get removed or added manually not through Supervisors field? Will that field reflect the change also? If not it will be a mess with Group members table.
Anyway, I will give you the BR script that will help to adjust members base on the Supervisors field. Any manual changes will not reflect the field value.
Steps:
1. Check if the field is empty => remove all members from Group.
2. If not, get all existing group members (in sys_user_grmember).
3. Compare with current field value to decide which member to add/remove.
Business Rule (Insert and Update) - on After - Condition: [Supervisors changes]
(function executeRule(current, previous /*null when async*/ ) {
// === If the field is empty then remove all group members ===
if (current.u_supervisors.nil()) {
var member = new GlideRecord('sys_user_grmember');
member.addQuery('group', current.sys_id.toString());
member.query();
while (member.next()) {
member.deleteRecord();
}
return;
}
// === END ===
var existingMem = [];
var addItem = [];
var removeItem = [];
var currentSup = current.u_supervisors.toString().split(',');
// === Get all existing group members ===
var grmember = new GlideRecord("sys_user_grmember");
grmember.addquery("group", current.sys_id.toString());
grmember.query();
while (grmember.next()) {
existingMem.push(grmember.user.sys_id.toString());
}
// === END ===
var arrayToLoop =
existingMem.length > currentSup.length ? existingMem : currentSup;
for (var i = 0; i < arrayToLoop.length; i++) {
if (existingMem.indexOf(currentSup[i]) == -1) {
if (currentSup[i]) {
addItem.push(currentSup[i]);
}
}
if (currentSup.indexOf(existingMem[i]) == -1) {
if (existingMem[i]) {
removeItem.push(existingMem[i]);
}
}
}
if (removeItem.length) { // REMOVE members
removeItem.forEach(function(itemOut) {
var member = new GlideRecord('sys_user_grmember');
member.addQuery('user', itemOut);
member.addQuery('group', current.sys_id);
member.setLimit(1);
member.query();
if (member.next()) {
member.deleteRecord();
}
});
}
if (addItem.length) { // ADD members
addItem.forEach(function(itemAdd) {
if (itemAdd) {
var member = new GlideRecord('sys_user_grmember');
member.addQuery('user', itemAdd);
member.addQuery('group', current.sys_id);
member.query();
if (!member.next()) {
member.initialize();
member.group = current.sys_id;
member.user = itemAdd;
member.insert();
}
}
});
}
})(current, previous);
Tell me if you need to adjust any logic.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-31-2023 08:36 PM
Hi @RWHeals ,
Are you saying after adding user "Abraham Lincoln" to the the Supervisors field, that user cannot be added to Group members (sys_user_grmember) table?
Please check if the user is already a member of that group.