- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-28-2024 01:46 AM - edited 03-28-2024 02:05 AM
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
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-28-2024 09:03 AM - edited 03-28-2024 09:10 AM
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,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-28-2024 11:10 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-29-2024 03:13 AM - edited 03-29-2024 03:13 AM
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
Please mark helpful/correct if my response helped you.