Catalog item variable need to be in read only for particular group member while impersonate

praveen1231
Tera Contributor

Hi, My requitement is to create a catalog Item variable called Manager(sys_user) and Committe(sys_user). When I impersonate the user, Catalog item variable need to change as read only for the particular group members(Cab approval).  If you have any idea, please let me know Thank you.

1 ACCEPTED SOLUTION

Hi @praveen1231 ,

 

Please use the following script include and onLoad client script.

 

Catalog Client Script:

 

function onLoad() {
    //Type appropriate comment here, and begin script below
    var ga = new GlideAjax('UserDataUtils');
    ga.addParam("sysparm_name", "checkGroupMember");
    ga.addParam("sysparm_user_id", g_user.userID);
	ga.addParam("sysparm_user_group", "CAB Approval"); // Your group name here
    ga.getXMLAnswer(validateUser);

    function validateUser(answer) {
        if (answer == 'true') {
            g_form.setReadOnly('your_field_name', true); //Change it to your field name
        }
    }

}

 

AnveshKumarM_1-1695729898739.png

 

 

Client Callable Script Include:

If you already have this script include, just add the code for checkGroupMember function.

var UserDataUtils = Class.create();
UserDataUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	getTitle: function(){
		var user_id = this.getParameter('sysparm_user_id');
		var usrGr = new GlideRecord('sys_user');
		if(usrGr.get(user_id)){
			return usrGr.getValue('title') + '';
		}
	},

	checkGroupMember: function(){
		var user_id = this.getParameter('sysparm_user_id');
		var group_name = this.getParameter('sysparm_user_group');
		var grpGr = new GlideRecord('sys_user_group');
		if(grpGr.get('name', group_name)){
			var memGr = new GlideRecord("sys_user_grmember");
			memGr.addQuery("user", user_id);
			memGr.addQuery("group", grpGr.getUniqueValue());
			memGr.query();
			if(memGr.next()){
				return 'true';
			}else{
				return 'false';
			}
		}

	},

    type: 'UserDataUtils'
});

 

AnveshKumarM_0-1695729851224.png

 

 

Please mark my answer as helpful and accept as solution if it helped you 👍✔️

Thanks,
Anvesh

View solution in original post

4 REPLIES 4

praveen1231
Tera Contributor

@AnveshKumar M Can you please help me to fix the issue. Thank you.

Hi @praveen1231 Give me 5 mins, I'm cooking the script 😀

Thanks,
Anvesh

Hi @praveen1231 ,

 

Please use the following script include and onLoad client script.

 

Catalog Client Script:

 

function onLoad() {
    //Type appropriate comment here, and begin script below
    var ga = new GlideAjax('UserDataUtils');
    ga.addParam("sysparm_name", "checkGroupMember");
    ga.addParam("sysparm_user_id", g_user.userID);
	ga.addParam("sysparm_user_group", "CAB Approval"); // Your group name here
    ga.getXMLAnswer(validateUser);

    function validateUser(answer) {
        if (answer == 'true') {
            g_form.setReadOnly('your_field_name', true); //Change it to your field name
        }
    }

}

 

AnveshKumarM_1-1695729898739.png

 

 

Client Callable Script Include:

If you already have this script include, just add the code for checkGroupMember function.

var UserDataUtils = Class.create();
UserDataUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

	getTitle: function(){
		var user_id = this.getParameter('sysparm_user_id');
		var usrGr = new GlideRecord('sys_user');
		if(usrGr.get(user_id)){
			return usrGr.getValue('title') + '';
		}
	},

	checkGroupMember: function(){
		var user_id = this.getParameter('sysparm_user_id');
		var group_name = this.getParameter('sysparm_user_group');
		var grpGr = new GlideRecord('sys_user_group');
		if(grpGr.get('name', group_name)){
			var memGr = new GlideRecord("sys_user_grmember");
			memGr.addQuery("user", user_id);
			memGr.addQuery("group", grpGr.getUniqueValue());
			memGr.query();
			if(memGr.next()){
				return 'true';
			}else{
				return 'false';
			}
		}

	},

    type: 'UserDataUtils'
});

 

AnveshKumarM_0-1695729851224.png

 

 

Please mark my answer as helpful and accept as solution if it helped you 👍✔️

Thanks,
Anvesh

Vishal Birajdar
Giga Sage

Hi @praveen1231 

 

You can write onLoad client script & Client callable script include 

 

1. onLoad client script :

 

function onLoad() {

    // 1. get logged in user

    var user = g_user.userID;

    // 2. Call glideAjax to check if user is member of group

    var ga = new GlideAjax('scriptIncludeName');
    ga.addParam('sysparm_name','CheckIfMemeberOf');   //function
    ga.addParam('sysparm_user',user);              //pass user value to script include
    ga.getXMLAnswer(callBackFun);

    function callBackFun(answer){

        if(answer == true){
             //make variable read-only
             g_form.setMandatory('var1',false);  //in case its already mandatory on form
             g_form.setReadOnly('var1',true);  //make var1 readonly
        }
    }  
}

 

2. Client callable script include function : 

 


CheckIfMemeberOf
function() {

        var user = this.getParameter('sysparm_user');
var userSysId;

var grUser = new GlideRecord('sys_user');
grUser.addQuery('user_name',user);
grUser.query();
if(grUser.next()){
userSysId = grUser.getUniqueValue();
}


        var grpMem = new GlideRecord('sys_user_grmember');

        grpMem.addEncodedQuery("group=CAB Group^user=" + userSysId);

        grpMem.query();

        if (grpMem.hasNext()) {

            answer = true;

        } else {

            answer = false;

        }

        return answer;

    },

 

 

 

Vishal Birajdar
ServiceNow Developer

I know one thing, and that is that I know nothing.
- Socrates