isMemberOf in client side

arunkumar_dharm
Kilo Expert

Hello Everyone,

I've a requirement. In the change task form, i've to make state field as read-only, when the logged in user is not a member of the assignment group of the change task.

I've tried with the below script include,

var CheckNilfiskAdminGroupMember = Class.create(); //(auto generated)
CheckNilfiskAdminGroupMember.prototype = Object.extendsObject(AbstractAjaxProcessor, { //(auto generated)

validateUser: function() {
var result;
var obj = gs.getUserID();
var gname = this.getParameter('sysparm_group_name');
gs.log("@@@@@@@@@"+gname);
var gr = new GlideRecord("sys_user_grmember");
gr.addQuery('group',gname);
gr.addQuery('user',obj);
gr.query();
if(gr.next())
{
result = true;
}



else{
result = false;
}


return result;
},

 

Client script:

function onSubmit() {

var name = g_form.getValue('assignment_group');
var obj = new GlideAjax('CheckNilfiskAdminGroupMember');
obj.addParam('sysparm_name','validateUser');
obj.addParam('sysparm_group_name',name);
obj.getXML(getData);

function getData(response) {

var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer);
if(answer == true)
g_form.setReadOnly('state',false);
else{
g_form.setReadOnly('state',true);
}
}}

It's not working as expected. Can someone someone help me.

 

Regards,

Arun

 

1 ACCEPTED SOLUTION

amlanpal
Kilo Sage

Hi Arun,

 

I have modified your script a bit. Please give it a try and let me know. You are calling the server side AJAX call in your onSubmit() client script. So basically you need to wait for the server side execution. Hence you need to call synchronous GlideAjax. 

Client Script:

function onSubmit() {
	var name = g_form.getValue('assignment_group');
	var obj = new GlideAjax('CheckNilfiskAdminGroupMember');
	obj.addParam('sysparm_name','validateUser');
	obj.addParam('sysparm_group_name',name);
	obj.getXMLWait();
	var answer = obj.getAnswer();
	if(answer == true)
		g_form.setReadOnly('state',false);
	else
		g_form.setReadOnly('state',true);
}

 

Script Include Function:

validateUser: 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;
	},

 

 

Hope this helps. Please mark the answer Correct/Helpful based on the impact.

Regards,

Amlan

View solution in original post

4 REPLIES 4

xiaix
Tera Guru

ashh908
Kilo Guru

Hi Arun,

You have to use a combination of Display Business Rule and Client Script to achieve this.

Follow the steps:

Step 1: Create a display Business rule with script as. Place the below script between function templates in script body.

 

g_scratchpad.grp = gs.getUser().isMemberOf('PASS GROUP NAME HERE');  

 

 

 

Now update the client script as

 

function onLoad() {

 

  var usr = g_user.getUserID();

 

  var gate = g_form.getValue('u_field');

 

  if (gate == 'true' && !g_scratchpad.grp){

 

      //Logic

 

    }

 

}

 

 

Mark Correct/Helpful, if applicable.

Thanks

Brian Lancaster
Tera Sage

You may want to take a look at this post.

isMemberOf Function in client script

amlanpal
Kilo Sage

Hi Arun,

 

I have modified your script a bit. Please give it a try and let me know. You are calling the server side AJAX call in your onSubmit() client script. So basically you need to wait for the server side execution. Hence you need to call synchronous GlideAjax. 

Client Script:

function onSubmit() {
	var name = g_form.getValue('assignment_group');
	var obj = new GlideAjax('CheckNilfiskAdminGroupMember');
	obj.addParam('sysparm_name','validateUser');
	obj.addParam('sysparm_group_name',name);
	obj.getXMLWait();
	var answer = obj.getAnswer();
	if(answer == true)
		g_form.setReadOnly('state',false);
	else
		g_form.setReadOnly('state',true);
}

 

Script Include Function:

validateUser: 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;
	},

 

 

Hope this helps. Please mark the answer Correct/Helpful based on the impact.

Regards,

Amlan