Populate group member based on group selected

Bindhu1
Tera Contributor

I have below 2 variable, based on group selection , group member should get populated [each group has only one member] 
1.approval_group: referring to sys_user_group table
2.approver: referring to sys_user table
tried below script, its not populating member, please help me here
------------------------------------------------------------------------------------
script include: 

var GetApproverByGroup = Class.create();
GetApproverByGroup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
   getApprover: function() {
       var groupSysId = this.getParameter('sysparm_group');
       var userSysId = '';
       if (groupSysId) {
           var gr = new GlideRecord('sys_user_grmember');
           gr.addQuery('group', groupSysId);
           gr.query();
           if (gr.next()) {
               userSysId = gr.user.toString();
           }
       }
       return userSysId;
   }
});

Onchange client script : on change of group variable

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
       return;
   }
   var ga = new GlideAjax('GetApproverByGroup');
   ga.addParam('sysparm_name', 'getApprover');
   ga.addParam('sysparm_group', newValue);
   ga.getXML(function(response) {
       var approver = response.responseXML.documentElement.getAttribute("answer");
       if (approver) {
           g_form.setValue('approver', approver);
       }
   });
}

 

1 ACCEPTED SOLUTION

Shivalika
Mega Sage

Hello @Bindhu1 

 

Use below 👇 script include 

 

var GetApproverByGroup = Class.create();

GetApproverByGroup.prototype = Object.extendsObject(AbstractAjaxProcessor, {

   

   // Function to get the first group member

   getApprover: function() {

       var groupSysId = this.getParameter('sysparm_group');

       var userSysId = '';

 

       if (groupSysId) {

           // GlideRecord to get group members

           var gr = new GlideRecord('sys_user_grmember');

           gr.addQuery('group', groupSysId);

           gr.query();

           // Fetch the first user in the group

           if (gr.next()) {

               userSysId = gr.user.toString(); // Getting user Sys ID

           }

       }

       return userSysId; // Return user Sys ID

   }

});

 

Use below 👇 client script 

 

function onChange(control, oldValue, newValue, isLoading) {

   if (isLoading || newValue == '') {

       return;

   }

   

   var ga = new GlideAjax('GetApproverByGroup');

   ga.addParam('sysparm_name', 'getApprover');

   ga.addParam('sysparm_group', newValue); // Send group Sys ID

   ga.getXML(function(response) {

       var approver = response.responseXML.documentElement.getAttribute("answer");

       if (approver) {

           g_form.setValue('approver', approver); // Set the approver field with the user Sys ID

     

 }

   });

}

 

 

Is the approver field also reference fields ? Because you are passing sys_id ? 

 

Also, is the Client script set to UI type ALl and the script include with "Client callable" box checked ? 

 

If all above is correct then make use of response directly to populate. 

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway. This will help me be recognized for the efforts and also move this questions from unsolved to solved bucket. 

 

Regards,

 

Shivalika 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNeEISQCY

View solution in original post

16 REPLIES 16

Ankur Bawiskar
Tera Patron
Tera Patron

@Bindhu1 

try to see what came in alert in client script

Is your client script set with UI Type - ALL?

Any additional ref qualifier applied on approver variable

Is the script include getting called?

var GetApproverByGroup = Class.create();
GetApproverByGroup.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getApprover: function() {
        var groupSysId = this.getParameter('sysparm_group');
        gs.info('groupSysId' + groupSysId);
        var userSysId = '';
        if (groupSysId) {
            var gr = new GlideRecord('sys_user_grmember');
            gr.addQuery('group', groupSysId);
            gr.query();
            if (gr.next()) {
                userSysId = gr.user.toString();
            }
        }
        return userSysId;
    }
});
function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var ga = new GlideAjax('GetApproverByGroup');
    ga.addParam('sysparm_name', 'getApprover');
    ga.addParam('sysparm_group', newValue);
    ga.getXML(function(response) {
        alert('response' + response);
        if (response) {
            g_form.setValue('approver', response);
        }
    });
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

I am able to see the alert as below, and its still same, approver field is not populating

client script set with UI Type - ALL

Any additional ref qualifier applied on approver variable - NO

Is the script include getting called- YES

 

Bindhu1_1-1743514252477.png

 

 

Hello @Bindhu1 

 

It's because you are returning the object directly. 

 

RETURN "gr.user.sys_id.toString()" - making sure it's a reference field. 

 

It will definitely work. 

 

Kindly mark my answer as helpful and accept solution if it helped you in anyway. This will help me be recognized for the efforts and also move this questions from unsolved to solved bucket. 

 

Regards,

 

Shivalika 

 

My LinkedIn - https://www.linkedin.com/in/shivalika-gupta-540346194

 

My youtube - https://youtube.com/playlist?list=PLsHuNzTdkE5Cn4PyS7HdV0Vg8JsfdgQlA&si=0WynLcOwNeEISQCY

@Bindhu1 

try this

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var ga = new GlideAjax('GetApproverByGroup');
    ga.addParam('sysparm_name', 'getApprover');
    ga.addParam('sysparm_group', newValue);
    ga.getXML(function(response) {
        alert('response' + response.toString());
        if (response) {
            g_form.setValue('approver', response.toString());
        }
    });
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader