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