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.

One thing to note about the ‘KB Search’ icon is that its display is actually controlled by a property on the dictionary entry of the string field it shows up next to. If you just want to remove the icon completely, you can simply remove the dictionary attribute and avoid writing a script altogether. This setting (and pretty much everything else you need to know about customizing the ‘KB Search’ functionality is described in this ServiceNow wiki page.

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.

function onLoad() {
   //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…

$$('img[src="images/icons/knowledge.gifx"]')[0].hide();

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!

function onLoad() {
   //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();
   }
}