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

Mark Manders
Mega Patron

This sounds like the weirdest requirement ever, but why not use a simple ui policy? If name starts with or contains ID, show field.

I do hope you don't have many Sidneys working for your company. And Liddy should also start looking for a new job.


Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

Thanks @Mark Manders , I think I not explained well, username samples for different users are:

id1234

ID2343

986439

128654

 

So id/ID in username not exist in middle of username characters i.e., username only startsWith id or ID.

 

UI Policy how could I achieve this, please share the desired UI Policy.

 

Thanks

The extra information provided in the comments helps. An onLoad client script like this, should do the trick:

 

function onLoad() {
    // Get the current user's ID
    var userID = g_user.userID;
    
    // Check if the userID contains 'id' or 'ID'
    if (userID.toLowerCase().indexOf('id') !== -1) {
        // If it does, make the 'u_consultant' field visible
        g_form.setVisible('u_consultant', true);
    } else {
        // Otherwise, hide the 'u_consultant' field
        g_form.setVisible('u_consultant', false);
    }
}

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

@Mark Manders not working when loggedin user username startswith 'ID'