- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 04:16 AM
My requirement is to restrict visibility of catalog based on the group. We want dynamic script so that only *SDM groups can see that items. any lead will be helpful
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 06:41 AM
Hello Milind,
You can try this code in script part of User criteria :
/** Scripted User Criteria is not cached, and evaluated everytime, so performance is dependent on the script.
* Populate `answer` with true/false or evaluate to true/false
* The script is evaluated in the scope the user criteria is defined
* Don't use `current` in the script or populate the variable
* Don't use `gs.getUser()` or `gs.getUserID()`,
* instead use `user_id` which contains the user sys_id against whom the evaluation is happening.
*/
answer = isUserMember(user_id);
function isUserMember(user_id) {
var isMember = false;
var gpMember = new GlideRecord("sys_user_grmember");
gpMember.addEncodedQuery('group.nameLIKESDM^user=' + user_id);
gpMember.query();
if (gpMember.next()) {
isMember = true;
}
return isMember;
}
You can check this using 'User Criteria Diagnostics'
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 04:59 AM
Hi @Milind1 ,
You can use related list "Available for" in catalog and create a record
You can add group name and catalog will only be visible to SDM group.
Please mark helpful and accept solution if it helped you
Regards,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 05:09 AM
As we have 100+ groups that contains SDM keyword. we want dynamic solution using script. below I have written a script but it is not working correctly
var grpsel = [];
var rec = new GlideRecord('sys_user_grmember');
rec.addQuery('user', gs.getUserID());
rec.query();
while (rec.next()) {
grpsel.push(String(rec.group));
}
var grp = new GlideRecord('sys_user_group');
grp.addEncodedQuery("nameLIKEsdm^sys_idIN" + grpsel);
grp.query();
if (grp.hasNext()) {
answer = true;
} else {
answer = false;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 06:14 AM - edited 02-23-2023 06:15 AM
Hi @Milind1 ,
Try below code:
var grpsel = [];
var rec = new GlideRecord('sys_user_grmember');
rec.addQuery('user', gs.getUserID());
rec.query();
while (rec.next()) {
grpsel.push(rec.group);
}
var grp = new GlideRecord('sys_user_group');
grp.addQuery("sys_id" , grpsel);
grp.addEncodedQuery("nameLIKEsdm");
grp.query();
while (grp.hasNext()) {
answer=true;
}
Please mark helpful and accept solution if it helped you.
Regards,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-23-2023 06:41 AM
Hello Milind,
You can try this code in script part of User criteria :
/** Scripted User Criteria is not cached, and evaluated everytime, so performance is dependent on the script.
* Populate `answer` with true/false or evaluate to true/false
* The script is evaluated in the scope the user criteria is defined
* Don't use `current` in the script or populate the variable
* Don't use `gs.getUser()` or `gs.getUserID()`,
* instead use `user_id` which contains the user sys_id against whom the evaluation is happening.
*/
answer = isUserMember(user_id);
function isUserMember(user_id) {
var isMember = false;
var gpMember = new GlideRecord("sys_user_grmember");
gpMember.addEncodedQuery('group.nameLIKESDM^user=' + user_id);
gpMember.query();
if (gpMember.next()) {
isMember = true;
}
return isMember;
}
You can check this using 'User Criteria Diagnostics'
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates