Restrict visibility of a field on the basis of certain user_name

rishabh31
Mega Sage

Dear Team,

 

I want to restrict the visibility/display of a field 'u_consultant' (String type field) on user records.

 

when the loggedin user's username startsWith 'id' or 'ID', then show (Display) 'u_consultant'

and when loggedin user's username NOT startswith NOR contains 'id' or 'ID', then HIDE 'u_consultant'

 

Wrote below scripts but during impersonation to users having or not having 'id' or 'ID', the user records keep displaying 'u_consultant' field i.e., Not working

 

Script Include;

 

var UserUtil1 = Class.create();
UserUtil1.prototype = {
    chkUsrID: function() {
        var userid = this.getParameter('sysparm_user');
        var result = this.newItem('check');
        var userGr = new GlideRecord('sys_user');
        userGr.addEncodedQuery('active=true^user_nameSTARTSWITHID^ORuser_nameSTARTSWITHid^sys_id=' + userid);
        userGr.query();
        if (userGr.next()) {
            result.setAttribute('check', 'yes');
        } else {
            result.setAttribute('check', 'no');
        }
    },

    type: 'UserUtil1'
};

 

Client Script (Above Script Include Called);

 

function onLoad() {
   //Type appropriate comment here, and begin script below
   var chkUsrID = new GlideAjax('UserUtil1');
   chkUsrID.addParam('sysparm_name', 'chkUsrID');
   chkUsrID.addParam('sysparm_user', g_user.userID);
   chkUsrID.getXML(getStatus);

   function getStatus(answer) {
	if (answer) {
		var result = answer.responseXML.getElementsByTagname("check");
		var check = result[0].getAttribute("check");
		if (check == 'yes'){
			g_form.setVisible('u_consultant', true);
		} else {
			g_form.setVisible('u_consultant', false);
		}
	}
   }
}

 

Please help to modify the script so that it will work

1 ACCEPTED SOLUTION

Appanna M
Tera Guru

Hello @rishabh31 ,

Please try the below logic it should works, I have tested it in my PDI.

You can write a Display business rule and onLoad client script to achieve this requirement. 

 

 

 

//Display BR
(function executeRule(current, previous /*null when async*/ ) {
    // Add your code here
    g_scratchpad.res = false;
    var curuser = gs.getUserID();
    gs.info("User:" + curuser);
    var getUser = new GlideRecord('sys_user');
    getUser.addQuery('sys_id', curuser);
	getUser.addEncodedQuery('user_nameSTARTSWITHid^ORuser_nameSTARTSWITHID');
	getUser.query();
	if(getUser.next()){
    g_scratchpad.res = true;
	}
})(current, previous);

//OnLoad CS:
function onLoad() {
   //Type appropriate comment here, and begin script below
   var res = g_scratchpad.res;
   alert("test:"+res);
   if(res == false){
   g_form.setVisible('u_consultant',false);
   }
   else {
	g_form.setVisible('u_consultant',true);
   }
}

 

 

 

 

Please Mark My Answer as Helpful and Accept as Solution, if you find this article helpful or resolves your issue.

 

Best Regards,

View solution in original post

21 REPLIES 21

Amit Pandey
Kilo Sage

Hi @rishabh31 

 

I believe you should not entertain such requirements. 

 

Regards,

Amit

Anubhav24
Mega Sage
Mega Sage

Hi @rishabh31 ,

I had worked on same requirement , please refer to below screenshots to create a UI Policy , in this instead of at or before you can use before

 

Anubhav24_1-1711707159789.png

Anubhav24_2-1711707174968.png

 

Please mark helpful/correct if my response helped you.