Troubling writing a Client Script and Script Include to check group membership on Service Portal

neil_b
Tera Guru

I have a record producer with a Checkbox variable. This variable should only be visible on the Service Portal IF the user is within a certain group. I am aware that I cannot use isMemberOf on Client Scripts, and that I need to create a Script Include and call it on the Client Script.

 

Here is my Script Include:

 

var verifyGroupMember = Class.create();
verifyGroupMember.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    checkMemberExists: function() {
		var result;
		var obj = gs.getUserID();
		var gname = this.getParameter('sysparm_group_name');
		var gr = new GlideRecord("sys_user_grmember");
		gr.addQuery('group',gname);
		gr.addQuery('user',obj);
		gr.query();
		if(gr.hasNext())
			return true;
		else
			return false;
	},
	type: 'verifyGroupMember'
});

 

 

Here is the onLoad Client Script calling the Script Include:

 

function onLoad() {
  //Type appropriate comment here, and begin script below
var usrID = g_user.userID; // get current user ID
var grp = new GlideAjax('table_name.verifyGroupMember');
 grp.addEncodedQuery('group.name=IT Support^user=' + usrID); // add user ID to encoded query and check within group
 grp.query();
 if(!grp.next()){
g_form.setVisible('checkbox_variable_name',false);
 }
}

 

When I login as someone NOT part of the IT Support group and access the record producer from within the Service Portal, the checkbox variable still appears when I expect it to be hidden. 

 

Can someone help me figure out where I'm going wrong?

1 ACCEPTED SOLUTION

Danish Bhairag2
Tera Sage
Tera Sage

Hi @neil_b ,

 

Can you try this code:

 

Client Script:

var gd = new GlideAjax('verifyGroupMember');
            gd.addParam('sysparm_name', 'checkMemberExists');
            gd.getXML(callback);

            function callback(response) {
                var answer = response.responseXML.documentElement.getAttribute("answer");

if(answer == 'true'){
//
}else{
g_form.setDisplayValue('checkbox_variable_name',false);
}

 

Server Side:

var verifyGroupMember = Class.create();
verifyGroupMember.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    checkMemberExists: function() {
		if(gs.getUser().isMemberOf('GroupName')){  //please enter proper group name or sysid of the group
			return true;
}
		else{
			return false;
}
	},
	type: 'verifyGroupMember'
});

 

Thanks,

Danish

 

 

View solution in original post

3 REPLIES 3

Danish Bhairag2
Tera Sage
Tera Sage

Hi @neil_b ,

 

Can you try this code:

 

Client Script:

var gd = new GlideAjax('verifyGroupMember');
            gd.addParam('sysparm_name', 'checkMemberExists');
            gd.getXML(callback);

            function callback(response) {
                var answer = response.responseXML.documentElement.getAttribute("answer");

if(answer == 'true'){
//
}else{
g_form.setDisplayValue('checkbox_variable_name',false);
}

 

Server Side:

var verifyGroupMember = Class.create();
verifyGroupMember.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    checkMemberExists: function() {
		if(gs.getUser().isMemberOf('GroupName')){  //please enter proper group name or sysid of the group
			return true;
}
		else{
			return false;
}
	},
	type: 'verifyGroupMember'
});

 

Thanks,

Danish

 

 

@Danish Bhairag2 thank you for the feedback! This worked PERFECTLY!

 

Sandeep Rajput
Tera Patron
Tera Patron

@neil_b Could you please update your client script as follows.

 

function onLoad() {
  //Type appropriate comment here, and begin script below
var grp = new GlideAjax('verifyGroupMember');
ga.addParam('sysparm_name','checkMemberExists'); 
ga.addParam('sysparm_group_name',"<group name>"); //Make sure to pass group name here
ga.getXML(checkMemberExistsResponse);  

// the callback function for returning the result from the server-side code
function checkMemberExistsResponse(response) {  
   var answer = response.responseXML.documentElement.getAttribute("answer"); 
if(answer=='false'){
g_form.setVisible('checkbox_variable_name',false);
}
}
}

 

Also, please make sure that your script include is Client callable script include.