Need to populate groupmembers based on group

Vinay49
Tera Expert

Hello,

We have 2 reference fields on form. 1 is referring to group table & other is group member table.

My requirement here is to Populate group members in 2nd reference field based on the group that we have selected in 1st reference field.

Can anyone help with this code to get users of selected groups & populate on 2nd refernce field.

Client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var answer;
    var ga = new GlideAjax('c_populateGroupUsers');
    ga.addParam('sysparm_name', 'getUsers');
    ga.addParam('sysparm_user', newValue);
    ga.getXML(getGroupUsers);
    function getGroupUsers(response) {
        answer = response.responseXML.documentElement.getAttribute("answer");
        var res = answer;
            alert(res);       
    }
    g_form.setValue('select_users', answer);
}

Script Include:
var c_populateGroupUsers= Class.create();
c_populateGroupUsers.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getUsers: function() {
        var arr = [];
        var group= this.getParameter('sysparm_user');
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('group', group);
        gr.query();
        while (gr.next()) {
            arr.push(gr.user);
           
        }
        return JSON.encode(arr);
    },
    type: 'c_populateGroupUsers'
});
6 REPLIES 6

Vaishnavi Lathk
Mega Sage
Mega Sage

Hello,

To populate the group members in the second reference field based on the group selected in the first reference field, we can improve the client script and Script Include provided. There are a few key adjustments needed:

  1. Client Script: We need to parse the JSON response correctly and set the values properly in the second reference field.
  2. Script Include: Ensure the GlideRecord query and the return of JSON-encoded array of users are correctly implemented.

Here's the updated code:

Client Script:

 

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') { return; } var ga = new GlideAjax('c_populateGroupUsers'); ga.addParam('sysparm_name', 'getUsers'); ga.addParam('sysparm_user', newValue); ga.getXMLAnswer(function(response) { var answer = response; var users = JSON.parse(answer); var userList = users.join(','); g_form.setValue('select_users', userList); }); }

 

 

Script Include:

 

var c_populateGroupUsers = Class.create();
c_populateGroupUsers.prototype = Object.extendsObject(AbstractAjaxProcessor, { getUsers: function() { var group = this.getParameter('sysparm_user'); var users = []; var gr = new GlideRecord('sys_user_grmember'); gr.addQuery('group', group); gr.query(); while (gr.next()) { users.push(gr.user.toString()); } return JSON.stringify(users); }, type: 'c_populateGroupUsers' });

Mark Manders
Mega Patron
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    
    // Create GlideAjax object
    var ga = new GlideAjax('c_populateGroupUsers');
    ga.addParam('sysparm_name', 'getUsers');
    ga.addParam('sysparm_group', newValue);
    ga.getXMLAnswer(function(response) {
        var answer = response;
        if (answer) {
            var userList = JSON.parse(answer);
            g_form.clearOptions('select_users');
            g_form.addOption('select_users', '', '-- None --');
            userList.forEach(function(user) {
                g_form.addOption('select_users', user.sys_id, user.name);
            });
        }
    });
}

 

var c_populateGroupUsers = Class.create();
c_populateGroupUsers.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    
    getUsers: function() {
        var groupSysId = this.getParameter('sysparm_group');
        var users = [];
        
        var gr = new GlideRecord('sys_user_grmember');
        gr.addQuery('group', groupSysId);
        gr.query();
        
        while (gr.next()) {
            var userObj = {
                sys_id: gr.user.sys_id.toString(),
                name: gr.user.getDisplayValue()
            };
            users.push(userObj);
        }
        
        return JSON.stringify(users);
    },
    
    type: 'c_populateGroupUsers'
});

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

Prataps135
Mega Sage

Hi @Vinay49 ,

 

Why don't you user advance reference qualifier. for the 2nd reference field.

Prataps135_0-1717411375071.png

 

Regards,

Pratap Singh Sisodia

This is the Best Practice and you can find similar configuration on the Incident form as well in case of Assignment group and Assigned to.