- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-07-2016 03:32 PM
Hello Community,
I have a question. I am trying to query a certain role and return a true statement when a user has that certain role. What am I doing wrong?
Here is the script I am trying to work with
function userHasRole(UserID, role){
var roles = new GlideRecord('sys_user_has_role');
roles.addQuery('user', userID);
roles.addQuery('role.name', change_manager);
roles.query();
if (roles == change_manager){
return 'true';
}
return 'false';
}
Also you can have a function within a function right? Here is the whole code I am working on:
answer = ifScript();
function ifScript() {
//answer = 'false';
var userID = gs.getUserID();
gs.log("work start check for " + userID + " assigned_to " + current.assigned_to);
if (userID == current.assigned_to) {
return 'true'; }
// query to see if userID has role change management, if so return true
function userHasRole(UserID, role){
var roles = new GlideRecord('sys_user_has_role');
roles.addQuery('user', userID);
roles.addQuery('role.name', change_manager);
roles.query();
if (roles == change_manager){
return 'true';
}
}
}
return 'false';
Thanks in advanced.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-08-2016 01:50 PM
Hello Everyone,
So I managed to hash it out. Here is the code:
answer = ifScript();
function ifScript() {
//answer = 'false';
var userID = gs.getUserID();
gs.log("work start check for " + userID + " assigned_to " + current.assigned_to);
if (userID == current.assigned_to) {
return 'true'; }
// query to see if userID has role change management, if so return true
var cm_role = new GlideRecord('sys_user_role');
cm_role.addQuery('name', "change_management");
cm_role.query();
while (cm_role.next()) {
var roles = new GlideRecord('sys_user_has_role');
roles.addQuery('user', userID);
roles.addQuery('role', cm_role.sys_id);
roles.query();
while (roles.next()){
gs.log("work start role check for " + userID + " has role " + cm_role.name);
return true;
}
}
gs.log("end of work start role check for " + userID + ", no writing allowed" );
return false;
}
The errors were as follows:
- I had to only use one "answer". In one variation of the code I had two answers, I could piggy back of the first answer argument.
- turns out that sys_user_has_role doesnt have a table named "name". This is why I had to query the name from the sys_user_role table while grabbing the sys_id of the name of the sys_user_role and populate that in line 20 of the code.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-08-2016 03:13 PM
I'm just curious, why not use the hasRole method?
//Göran
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-08-2016 03:24 PM
Hello Goran,
Do you have an example code of how this would work?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-08-2016 03:46 PM
Sure,
You can for example read about it here: ServiceNow Developers
short version:
g_user.hasRole('change_manager');
or gs.hasRole('change_manager');
Depending if you are using a client script(g_user) or server(gs)
it returns true if the user has the role... But beware, it can fool you when you are admin, it always return true if you are a admin, even if you don't have the role.. No idea the reason behind that thou.
You can also find many functions already using it. For example the OOB ui action "Resolve incident".
Look at it and you will se it be used in the conditions... like this: (current.incident_state != 7 && current.incident_state != 6) && (gs.hasRole("itil") || gs.hasRole("itil_admin"))
//Göran
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-08-2016 05:26 PM
Bravo Goran,
Wish you hoped on earlier. BTW the link you provided is dead on my end, may you kindly re-post the link for my review?
Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-09-2016 01:11 AM
Sorry,
Didn't see this post until now
Anyway.. That link was for the developer site and it's docs. try this: https://developer.servicenow.com/app.do and then search for hasRole.
Here you also got a menu to the left where you for example can choose g_user or glidesystem(gs) and then see all the methods for them and most of them also got examples how to use it. I really love that site.
Let me know if there is anything else.
//Göran