The CreatorCon Call for Content is officially open! Get started here.

How to check multiple users are member of group or onsubmit catalog client script not submitting

Dedeepya Reddy
Tera Expert

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

1 ACCEPTED SOLUTION

Dedeepya Reddy
Tera Expert

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'
});

 

View solution in original post

1 REPLY 1

Dedeepya Reddy
Tera Expert

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'
});