SATURDAY, MAY 19, 2012

Hide ‘Search Knowledge’ Icon in Service-now

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 that shows up in a default Service-now 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 Service-now 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 Service-now) 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…

ref.style.display = ‘none’; //’ref’ 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){
      //Knowledge icon does not have an id
      //Get all of the A tag elements in the document
      var refs = document.getElementsByTagName('a');
      if (refs){
         for(var i=0; i < refs.length; i++){
            //Check for the name of the icon image
            if (refs[i]innerHTML.indexOf('knowledge.gifx') > 0){
               //Hide the element
               refs[i].style.display = 'none';
            }
         }
      }
   }
}



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();

Comments

Posted On
Nov 15, 2011
Posted By
Jared Romaine

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?

Posted On
Nov 15, 2011
Posted By
Mark Stanger

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

Leave a Reply


Notify me of followup comments via e-mail. You can also subscribe without commenting.

Latest Comments

  • Jim Coyne: I’m not sure exactly what you are looking for, but can you use “window.location” in your...
  • Ian: Might want to check the single quotes around ITIL in the condition line, they gave an error for me until I...
  • Mark Stanger: That’s correct. This returns instance URLs. I don’t have an equivalent currently that...
  • ND: Hi Mark, This is very useful information. I am looking for similar method to find URL of a site created by us. We...