J
ust a quick post today about something that I end up dealing with on most deployments. The requirement often comes to me as this…
How do I hide this form icon for some users but not others?
This request can apply to different types of icons, but is often asked about the ‘Search Knowledge’ (KB Search) icon or the ‘Suggestion’ icon that shows up in a default ServiceNow installation next to the ‘Short Description’ field. This article shows how you can remove this icon (or any other icon image) selectively using client scripts.
Here’s the script. This example is designed to be used in an ‘onLoad’ client script on the ‘Incident’ table. The main point of the script is to find the icon and hide it if the user does not have the ‘itil’ role. For a lot of HTML elements you can use a specific element ID to target and hide the element directly. In this case (and in the case of most icons in ServiceNow) the element in question doesn’t have a specific ID attribute so you have to go about your task a little bit differently.
The script goes through the entire page and finds any ‘A’ tags on the page (indicating an HTML link). Then it examines all of these elements one-by-one to see if any of them contain an ‘innerHTML’ attribute containing ‘knowledge.gifx’ — the image name of our icon. Once we’ve done that we know we’ve found our element and we can hide it with this code…
elmt.hide(); //’elmt’ refers to the found ‘A’ tag containing the icon
You can easily customize this script to hide an icon for different roles or a different icon completely by modifying the ‘g_user.hasRole’ and ‘knowledge.gifx’ sections below.
//Hide the kb icon for users that do not have the itil role
var isITIL = g_user.hasRole('itil'); //Check if user has itil role
if(!isITIL){
try{
//Find the knowledge icon 'a' tag and hide
$$('a').each(function(elmt) {
if(elmt.innerHTML.indexOf('knowledge.gifx') > 0){
elmt.hide();
}
});
}catch(e){}
}
}
If you know that the KB icon will be the only (or first) KB icon on the form, you could accomplish the same thing in one line of code…
Hiding the ‘Suggestion’ icon for a field
The suggestion icon is a bit simpler because it has an ID to target. Here’s a script you could use to hide the suggestion icon from the comments field if the table is not ‘incident’. The script would need to be added to an ‘onLoad’ client script on the ‘Task’ table with the ‘Inherited’ checkbox checked. Just change the ‘fld’ variable value for use with another field!
//Identify the table and the field name
var tbl = g_form.getTableName();
var fld = 'comments';
if(tbl != 'incident'){
//Hide the suggestion icon for the field
$('lookup.' + tbl + '.' + fld).hide();
}
}
Anybody know how to take the code that executes when you click the “Search Knowledge” button and add it to the “Submit” button when users submit incidents via Self-Service? Basically we would like a popup to appear after the user clicks “Submit” that shows Knowledge articles that may apply. At the bottom of the popup we would have a “Did these suggestions resolve your issue?” message. If they choose “Yes” the incident is auto-closed, if they choose “No” the incident is created. Any suggestions?
Hey Jared,
I haven’t ever seen that done that way before and I don’t have any immediate idea of how to accomplish that. Typically, if you’re doing something like this it flows from the knowledge article to the incident screen. Users search knowledge, view an article, and then determine if they still need to open an incident. That flow is built into the tool. You might consider asking this on the ServiceNow forums to see if anybody there has done something like this. I’ll reply here if I come up with anything.
Mark
If you are on Helsinki and still using this Knowledge Icon it can not be hidden as described in this article anymore. This is because knowledge.gifx is not in the innerHTML anymore.
However after modifying the selector you can hide the Icon:
elmt.hide();
});
BTW: If you inspect the Icon with your Browser tools it will show you the following code inside the tag:
Thanks Niclas!
Awesome! Worked great.