Generate a GlideRecord Query for a List

/, System UI/Generate a GlideRecord Query for a List

Generate a GlideRecord Query for a List

Have you ever wanted to get a quick GlideRecord Query for a list you’re looking at? I’ve wanted to do that many times. Sometimes it’s because I’m writing a business rule and sometimes I’ve got to run a background script to update some values. I ran into this yesterday when I was working on a scripted web service with about 50 inputs and was making a second related web service that needed the same inputs as the first. I ended up writing a background script to do a simple query of the first web service inputs and insert a copy of each one for the new web service.

Using this little helper I put together the other day saved me some time and hassle of tracking down the table names and filters to get the right query. It’s a simple little script that makes life as an admin just a little bit easier.

To set it up in your instance go to System UI -> UI Context Menus and open a new record. The other values should be as follows:

Table: Global
Menu: List Header
Type: Action
Name: Get GlideRecord Query
Condition: gs.hasRole(‘admin’)
Order: 2000
Action script:

// Check for a query from the related list
var rel_list_prefix = '';
try{
   if(g_form != undefined){
      var field_name = g_list.getRelated().split('.')[1];
      if(field_name != undefined){
         var sys_id = g_form.getUniqueValue();
         rel_list_prefix = field_name + "=" + sys_id + "^";
      }
   }
} catch(e) {}

// Generate the query
var query = "var gr = new GlideRecord('" + g_list.getTableName() + "');\n";
query += "gr.addQuery('" + rel_list_prefix + g_list.getQuery() + "');\n";
query += "gr.query();\n";
query += "while(gr.next()) {\n";
query += " \n";
query += "}";
alert(query);

Now that you’ve got this, from any List you can right-click on the header and the bottom option will be “Get GlideRecord Query” and you can copy the resulting code. It’s nothing complicated, but can still save a bit of time.

The key to making this work is the g_list object that has the details for the list that you’re on. It’s documented fairly well on the ServiceNow Wiki and if you haven’t seen it before I’d recommend glancing at what options are available.

By | 2018-07-09T14:59:52+00:00 August 14th, 2014|Categories: Scripting, System UI|Tags: , |4 Comments

About the Author:

Mark has worked in the IT industry since 2002 and with ServiceNow since 2007. He is the founder and creator of SN | Guru and the co-founder of Crossfuze, one of the worlds leading ServiceNow consulting partners. Prior to co-founding Crossfuze, he worked for ServiceNow as a Senior Architect on the Professional Services team. He has personally led dozens of successful implementations encompassing every part of the ServiceNow platform. He is also responsible for designing and developing groundbreaking ServiceNow solutions and best practices in the form of various applications, turnkey solutions, and integrations during his tenure at ServiceNow, Crossfuze and, of course, SN | Guru. These solutions are used today by ServiceNow administrators and consultants alike in hundreds of ServiceNow instances around the world!

4 Comments

  1. Jack Scotty August 14, 2014 at 2:47 pm - Reply

    Any reason why you are using ‘addQuery()’ instead of ‘addEncodedQuery()’ in the alert message?

    • James Farrer August 14, 2014 at 3:11 pm - Reply

      Only because that’s what came to my mind first. ‘addQuery()’ can take 1, 2, or 3 parameters. If you only pass it one, it treats it as an encoded query behaving the same as ‘addEncodedQuery()’.

  2. Alain Müller (Aspediens) August 15, 2014 at 2:43 am - Reply

    Hello James,

    Thanks for sharing this!
    Two remarks:
    1. Your code is using the “g_form” object which, I believe, is not available from a List.
    2. We have just discovered at Aspediens that the object “g_list” seems to be null in Eureka. We have opened an Incident in /hi for this issue.

    Kind Regards,

    Alain

    • James Farrer August 15, 2014 at 9:11 am - Reply

      I put the checking in place to make sure g_form is there and handle it gracefully if it’s not. When the list is a Related List g_form is available and is used to build the query that includes the current record.

      Thanks for the heads up on it not working in Eureka. There’s nothing in the documentation about it so I’ll have to keep an eye on it.

Leave A Comment