A URL in ServiceNow is more than it seems at first glance. The various components of a URL actually contain quite a bit of information about what the system will do when that URL (or link) is used. One way that you can leverage the ServiceNow URL structure is by using the ‘sysparm_query’ argument to return a list of certain records. You can also use ‘sysparm_query’ as a way of setting default values on a new record if necessary. This article shows you how.
This URL opens a new incident record with default values for ‘Active’, ‘Priority’, and ‘Short Description’.
Another place where you can apply the same concept is in module links in the left navigation pane. Since modules use the defined module parameters to create a URL, you can leverage the module filter and arguments to create ‘sysparm_query’ arguments in your module link. Simply create a module with a ‘Link Type’ of ‘New Record’ on whatever table you want and populate the ‘Filter’ field with the field/value pairs you want. This image shows how you could create a module to open a new incident record with default values for ‘Active’, ‘Priority’, and ‘Short Description’.
I wonder if you could give a little more detail about the syntax of the sysparm_query clause in a URL. I’ve recently been trying to use a reference qualifier to do a query that consists of a number of ANDs and ORs for which I would like to be able to use parentheses – but the URL syntax doesn’t seem to allow that. As an example, suppose I want to restrict the list of CIs that are presented when you click the magnifying glass on an Incident form to those where either the Company is as entered on the Incident or the Location is as entered on the Incident, but the Install Status must also be In Service. The kind of sysparm_query I want to generate is:
The query doesn’t work with the parentheses there, but without them, how is the query evaluated – is there a precedence such that OR gets evaluated before AND or vice versa? Or are the operators evaluated in sequence from left to right, in which case my query above (minus the parentheses) would return all the CIs that belong to XYZ Inc that are also In Service plus all the CIs that are in London regardless of their Install Status.
My experience has been that the ‘OR’ gets evaluated before the ‘AND’. That being the case, your query should return exactly what you think it should if you remove the parentheses.
I used this trick to set a Change “type” with an interceptor instead of defining a view with an interceptor. The target URL I used:
Correction from my post regarding interceptor above: better to use; ‘change_request.do?sysparm_query=type=Normal^state=1’ or similar. My sysparm_stack is wrong and not needed for my use case.
I’m trying to use this in order to populate a specific CI into the incident or request, but haven’t been able to get it to work. Do I need to use the sysID or the text? here is the link in the ‘Create New’ incident module: incident.do?sys_id=-1&sysparm_query=active=true&sysparm_stack=incident_list.do?sysparm_query=active=true
I tried adding an &sysparm_query=cmdb_ci=sysid
Where sysid is I put the sys id, but it didn’t work. Any suggestions?
You only need one ‘sysparm_query’ parameter in your URL. You also need to use the ‘sys_id’ if you’re using URL arguments. Something like this should work…
Having said that, if you’re doing this from a ‘Create new record’ module, then you shouldn’t need to add ‘sysparm_query’ parameters or arguments at all. You can just use the filter on the module definition to supply the values you want to set in the new record.
Thanks Mark, got it working late yesterday.
I am trying to use this as well, but I want to use with an order guide. When a person is hired, I want to send an email to the hiring manager with a link to the new user provisioning screen with the user name populated. My link brings me to the right screen, but the variable, “requested_for” is not populated.
Should I be using a different syntax for the variable>
‘sysparm_query’ is only available for standard records and forms. In the service catalog you can accomplish something similar by using client scripts. Here’s an article that describes how to do that.
Hi to all,
Thanks for this information really useful!
I have a question: is there any way to save incident using URL? I mean to create and save incident in Opened state using URL in one go.
Thanks in advance.