- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 04:41 AM
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.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 05:06 AM
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
}
}
}
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'
});
Please mark my answer as helpful and accept as solution if it helped you 👍✔️
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 04:44 AM
@AnveshKumar M Can you please help me to fix the issue. Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 04:53 AM
Hi @praveen1231 Give me 5 mins, I'm cooking the script 😀
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 05:06 AM
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
}
}
}
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'
});
Please mark my answer as helpful and accept as solution if it helped you 👍✔️
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-26-2023 05:01 AM
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;
},
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates