- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-21-2024 04:51 AM - edited 11-21-2024 05:18 AM
Requirement: when form is submitted the users need to be alerted when the users they have selected is already a member of group
the users are collected in the lost collector variable
and the group is selected in a reference field
i couldn't find any article related in the community so creating my own so this can be help full for others
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-21-2024 04:56 AM - edited 11-21-2024 05:16 AM
The below is the on submit client script
function onSubmit() {
// this is to prevent the on submit loop
if (!g_form.ajaxComplete) {
validateMembership();
return false;
}
function validateMembership(callback) {
// Get the Sys ID of the group from the Reference variable
var groupSysId = g_form.getValue('assignment_group'); // Corrected variable name for the group
//alert('Selected group Sys ID: ' + groupSysId); // Alert group Sys ID for debugging
// Get the list of users from the List Collector variable
var selectedUsers = g_form.getValue('assignment_group_members'); // Corrected variable name for users
//alert('Selected users (Sys IDs): ' + selectedUsers); // Alert list of selected users
// Convert the List Collector value to an array of Sys IDs
selectedUsers = selectedUsers.split(','); // List Collector values are stored as comma-separated Sys IDs
//alert('Number of selected users: ' + selectedUsers.length); // Alert the number of selected users
var ga = new GlideAjax('CheckGroupMembership');
ga.addParam('sysparm_name', 'checkGroupMembershipForUsers');
ga.addParam('sysparm_group', groupSysId);
ga.addParam('sysparm_users', JSON.stringify(selectedUsers));
// Perform the GlideAjax call to the Script Include
ga.getXMLAnswer(function(response) {
var result = JSON.parse(response);
var alreadyInGroup = result.alreadyInGroup;
if (alreadyInGroup.length > 0) {
// Alert users who are already in the group and prevent form submission
g_form.addErrorMessage('The following users are already members of the group:' + alreadyInGroup.join(','));
} else {
g_form.ajaxComplete = true;
g_form.submit();
}
});
}
}
The below is the script include
var CheckGroupMembership = Class.create();
CheckGroupMembership.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkGroupMembershipForUsers: function() {
// Get the group ID and user IDs passed from the client script
var groupSysId = this.getParameter('sysparm_group');
var users = JSON.parse(this.getParameter('sysparm_users'));
gs.info('Group ID received: ' + groupSysId); // Log group ID
gs.info('Users array received: ' + JSON.stringify(users)); // Log array of user Sys IDs
var alreadyInGroup = [];
// Check each user's membership status in the group
for (var i = 0; i < users.length; i++) {
var userSysId = users[i];
gs.info('Checking membership for user: ' + userSysId); // Log each user being checked
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', groupSysId);
gr.addQuery('user', userSysId);
gr.query();
if (gr.next()) {
gs.info('User ' + userSysId + ' is already a member of group ' + groupSysId); // Log if user is in the group
var userGr = new GlideRecord('sys_user');
if (userGr.get(userSysId)) {
var userName = userGr.getDisplayValue('name');
alreadyInGroup.push(userName); // Add the display name instead of the Sys ID
gs.info(userName + ' is already a member of group ' + groupSysId);
}
} else {
gs.info('User ' + userSysId + ' is NOT a member of group ' + groupSysId); // Log if user is not in the group
}
}
// Return the list of users already in the group
return JSON.stringify({
alreadyInGroup: alreadyInGroup
});
},
type: 'CheckGroupMembership'
});
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-21-2024 04:56 AM - edited 11-21-2024 05:16 AM
The below is the on submit client script
function onSubmit() {
// this is to prevent the on submit loop
if (!g_form.ajaxComplete) {
validateMembership();
return false;
}
function validateMembership(callback) {
// Get the Sys ID of the group from the Reference variable
var groupSysId = g_form.getValue('assignment_group'); // Corrected variable name for the group
//alert('Selected group Sys ID: ' + groupSysId); // Alert group Sys ID for debugging
// Get the list of users from the List Collector variable
var selectedUsers = g_form.getValue('assignment_group_members'); // Corrected variable name for users
//alert('Selected users (Sys IDs): ' + selectedUsers); // Alert list of selected users
// Convert the List Collector value to an array of Sys IDs
selectedUsers = selectedUsers.split(','); // List Collector values are stored as comma-separated Sys IDs
//alert('Number of selected users: ' + selectedUsers.length); // Alert the number of selected users
var ga = new GlideAjax('CheckGroupMembership');
ga.addParam('sysparm_name', 'checkGroupMembershipForUsers');
ga.addParam('sysparm_group', groupSysId);
ga.addParam('sysparm_users', JSON.stringify(selectedUsers));
// Perform the GlideAjax call to the Script Include
ga.getXMLAnswer(function(response) {
var result = JSON.parse(response);
var alreadyInGroup = result.alreadyInGroup;
if (alreadyInGroup.length > 0) {
// Alert users who are already in the group and prevent form submission
g_form.addErrorMessage('The following users are already members of the group:' + alreadyInGroup.join(','));
} else {
g_form.ajaxComplete = true;
g_form.submit();
}
});
}
}
The below is the script include
var CheckGroupMembership = Class.create();
CheckGroupMembership.prototype = Object.extendsObject(AbstractAjaxProcessor, {
checkGroupMembershipForUsers: function() {
// Get the group ID and user IDs passed from the client script
var groupSysId = this.getParameter('sysparm_group');
var users = JSON.parse(this.getParameter('sysparm_users'));
gs.info('Group ID received: ' + groupSysId); // Log group ID
gs.info('Users array received: ' + JSON.stringify(users)); // Log array of user Sys IDs
var alreadyInGroup = [];
// Check each user's membership status in the group
for (var i = 0; i < users.length; i++) {
var userSysId = users[i];
gs.info('Checking membership for user: ' + userSysId); // Log each user being checked
var gr = new GlideRecord('sys_user_grmember');
gr.addQuery('group', groupSysId);
gr.addQuery('user', userSysId);
gr.query();
if (gr.next()) {
gs.info('User ' + userSysId + ' is already a member of group ' + groupSysId); // Log if user is in the group
var userGr = new GlideRecord('sys_user');
if (userGr.get(userSysId)) {
var userName = userGr.getDisplayValue('name');
alreadyInGroup.push(userName); // Add the display name instead of the Sys ID
gs.info(userName + ' is already a member of group ' + groupSysId);
}
} else {
gs.info('User ' + userSysId + ' is NOT a member of group ' + groupSysId); // Log if user is not in the group
}
}
// Return the list of users already in the group
return JSON.stringify({
alreadyInGroup: alreadyInGroup
});
},
type: 'CheckGroupMembership'
});