ServiceNow Scripted REST APIs & Retrieving Catalog Item Variables

In Fuji and prior releases, ServiceNow has supported the REST API, but they've only supported simple table and record APIs using GET, PUT, POST, PATCH, and so on. In Geneva however, ServiceNow introduced Scripted REST Apis.

Scripted REST APIs allow a developer to create a custom REST API Resource, receive request arguments via a REST call, and return data (as with GET requests), create a record (as with POST requests), update records (as withPUT/PATCH requests), or delete records (using a - you guessed it - DELETE request) using custom code that can utilize REST headersquery parameters, and/or request body elements

Scripted REST APIs have only become available fairly recently (in the Geneva release of ServiceNow), and are something that a lot of developers have been avoiding, as they're new and arcane, and the documentation around them is still fairly new, and not very well built-out.
In this article, we're going to learn how to create our own custom scripted REST API, which we'll use for our demo project: Retrieving the service catalog variables associated with a given RITM, for reporting in an external system. 

Read More

What's New in Helsinki?

It seems like only yesterday that we upgraded to Geneva... Maybe that's because many ServiceNow customers still haven't done so. That won't stop us from exploring the new hotness that is Helsinki, though! As always we aim to provide you with the latest updates on the latest update. 

Get it? That was a terrible pun. I apologize. 

We've scoured the existing documentation, watched the available demos, and tried out the early-access dev instances. In this article, we're going to cover all of the most visible changes and new features in Helsinki so far on a product-by-product basis, and give you the low-down on what you can expect out of an upgrade. Let's get started! 

Note: This is part one of a two-part series on ServiceNow HelsinkiSubscribe to stay tuned for when part 2 comes out! 
Read More

Customizing UI16 Through CSS and System Properties

When you've got two UI versions included in your instance (such as with Geneva, having UI15 and UI16), customizing the user interface can become somewhat complicated. You could spend hours modifying a theme, or modifying the default UI, only to find that that doesn't modify UI16 at all, and there's no real way to tell. 

In this article, I'm going to guide you through modifying every little bit of UI16's theme. I'll also show you how to make a custom theme that users can select, and modify the UI16 UI to include your company's branding, logo, and slogan. 

Read More

ServiceNow Versions: Express Vs. Enterprise

In November of 2014, ServiceNow announced that it was launching a trimmed-down, simpler version of its' ITSM platform. The "light" version would be called Express, and they've dubbed the more full-featured edition Enterprise. But what is the difference between "ServiceNow" (Enterprise) and "ServiceNow Express"? 

ServiceNow Express is significantly less expensive than its' big brother, Enterprise; and for many companies, it is an entirely viable solution for their ITSM needs. It is however, not for everyone. ServiceNow has designed Express to appeal to businesses with fewer than 1,000 employees, who are willing and able to adopt "mostly out-of-box" ITIL processes without the need for much customization, whereas Enterprise is meant to be a "There's almost nothing it can't do" sort of tool that will bend to fit your processes and even automate them to a level that can entirely eliminate the need for some full-time staff. 

In this article, we're going to go over some of the core functionality offered in ServiceNow Express, and point out those areas and functionality which are lacking. We'll also discuss upgradeability, and some examples and tips for determining which ServiceNow option might best suit your business needs.

Read More

Update Set Collision Avoidance Tool: V2

In a previous article: Detect Update Set Collisions Before They Happen, we made a tool freely available, which would help to prevent developers from accidentally overriding or colliding with each other's update sets, or otherwise having issues caused by conflicts or improperly selected update sets. 

Since publishing that article, we've gone through multiple version iterations, and we've recently released the official Version 2
Version 2 is available from this link, as is the documentation. 

Feel free to click below, to read more.

Read More

ServiceNow: What's New in Geneva & UI16 (Pt. 2)

In this article, we're going to talk about some of the updates that were made to the "Part 1" article shortly after publishing it, list out some of the more technical changes in Geneva, as well as answer some of the most common questions that our clients and reads have had for us.

First, let's jump straight to the Q&A section, which includes new info on how to more fully customize the UI16 interface and work around some of the new features to restore original functionality or customize the new functionality. Click below to read on! 

Note: This is part 2 of a 2-part series of posts on ServiceNow's Geneva version, and the updated UI16 that comes along with it. Please read Part 1 first, or you might lack context for some of the things we discuss.
Read More

Understanding Attachments in ServiceNow

Attachments in ServiceNow are not so straight-forward as email attachments, and it's not always obvious how to do what you want with them. Recently, I had a need to copy some attachments programmatically and otherwise fiddle around with attachments. 

After finding nothing in the ServiceNow product documentation, nothing on the wiki, and very little through the usual search channels, I figured it was time to write an article about how to programmatically deal with attachments in ServiceNow. 

In this article, we'll learn how attachments really work in ServiceNow, how we can manipulate, copy, and even generate hashes for them (sometimes)! 

Read More

Reference Field Auto-Complete Attributes

If you've ever used a reference field, you've probably seen that when you start typing, an auto-complete drop-down appears, to help you out. The info that appears in this auto-complete drop-down, is usually the display value for a given table (that is, the field which has the display property set to true). 

There are many cases where you may want more information than that. Maybe you've got many records with similar (or even identical) display values/names. Maybe you're referencing the user table, and want to make sure you don't select the wrong "John Smith". 

Read on to learn more! 

Read More

GlideRecord & GlideAjax: Client-Side Vs. Server-Side

It is easy to shoot yourself in the foot when it comes to performance, using client side scripts. For this reason, it is generally good practice to move any complex processing, large requests (more than a hundred or so records), and multi-level dot-walking to server-side scripts such as business rules which can present the data to the client. This can be done in a few ways, such as by using GlideAjax. It's also a good idea to utilize callback functions in almost every case where you're doing record lookups client-side. 

In this article, we'll go over some of the best ways to get the greatest client-side performance out of ServiceNow, by using good coding practices, callback functions, and GlideAjax to push some of the work off onto the server, rather than the client and prevent the client from having to wait around for the server to respond. 

Read More

Make Your Log Entries Easier to Find

Like most developers, I write a lot of code. 
Like all developers, sometimes my code doesn't work. 
When that happens (server-side), I rely on gs.log() to spit out some information to tell me when, where, and maybe even how the error happened. 

gs.log() is an extremely useful little function that is great for troubleshooting your code in dev, as well as catching unexpected behavior or circumstances in production. 
For example, you might have your code run inside a try { } block, but have the following catch() { } log the error message and accompanying run-time technical details using gs.log(). 
Or, you might write your code so that if a function receives some unexpected data, a log entry is created with the details, while the user is informed using gs.addErrorMessage(). 

The problem is that whenever I make one of these logs, I find myself sifting through tens, hundreds, or even thousands of other log entries to find just the one that my code triggered - and of those, just the one that was triggered by the most recent execution of my code. 
What's even worse, is if a user has to let me know about a bug or error they got, but they can only tell me that it happened "around Thursday". How am I supposed to find that log!? 

Join me after the jump, and not only will I teach you how to do it, but I'll give you a file you can deploy in your instance to enable this functionality within minutes! 

Read More

A Better, One-Click Approval

The way approvals work in ServiceNow by default is that an email goes out, and the user can click a link in the email to approve or reject. That link is generated in the default approval notification template using ${mailto:mailto.approval}. Clicking the link that is generated in the approval email based on this template, will pop up another email on the user's computer. 

However, this only works if they have their system configured to correctly handle mailto href links, and if they received the email using the same program they've configured to handle mailto links, and if they're not using webmail. 

Definitely not ideal. 
How can we improve this situation? As is the case with nearly every problem in life, the answer is CODE

Our goal will be to give users a link that they can click to approve or reject a record, that doesn't use mailto, and that works no matter how they're viewing or sending email. 

Join me after the break to see a detailed explanation of how it's done, and download an update set that'll let you deploy this functionality in your instance right now, for free!

Read More

Quickly Move Changes Between Update Sets

We've all been there. -- You've been wired in, hammering away on code, making great progress on several fronts, when all of a sudden you're gripped with dread. You check the sprocket menu at the top-right, cautiously hopeful... but as it loads, and recognition sets in, the reality of the situation crashes into you like a sack of pidgeons.

You forgot to select your update set. 

At this point, it is perfectly reasonable to curl up into a ball and weep at the fact that you're going to have to sift through hundreds or even thousands of updates in the Default update set in your busy environment, picking out the ones that are yours and that are relevant to your current work, manually opening each record one at a time, and moving them to the correct update set. 

But here's a better idea -- What if you could just tick the box next to each update, click a button, and dump them all into your current update set? 

Join me after the break and not only will I show you how to do that, but I'll give you an update set that you can deploy to enable that functionality in a matter of minutes! 

Read More

Customize the Reference Icon Pop-up

As most ServiceNow users know, when you hover over the icon next to a reference field on a given form, you can see some details about the record that's being referenced. 

Well, what if you want to customize what fields are shown in that pop-up reference view? 

When a requirement came through to do just that in my instance, I was stumped for a good long while, chasing down some inaccurate/outdated documentation, but eventually I figured out the following process. 

Join me after the jump to see how to modify this pop-up view. 

Read More

ServiceNow: Geneva & UI16 - What's new

Brace yourself. Geneva is coming. 

Personally, I'm excited - I like new things. I've always been the early adopter. But I know that not everyone is as gung-ho for the future as I am, so I thought I'd share some tips and tricks on ServiceNow's "Geneva", and the new, drastically overhauled "UI 16" that will be the new place where most of us ServiceNow developers spend our daily 8-12 hours. 

Note: This is part 1 of a 2-part series on ServiceNow's Geneva update. This part will focus on the interface, and stuff you're likely to run into on day 1, as well as basic stuff you'll need to know so you don't shoot yourself in the foot. A more in-depth exploration of the different process areas such as changes to Knowledge Management, Change Management, performance, security, and so on - is forthcoming. So subscribe, and stay tuned! 

Join me after the jump, and learn what's new in Geneva from the perspective of an admin, a developer, and a user - from the browser-based IDE and the new way to elevate permissions in high security mode, to the basics of navigation in the new world... of Geneva. 

Read More

Detect/Prevent Update Set Conflicts Before They Happen

Do you have multiple developers working in the same instance? If so, there's a good chance that on at least several occasions, one of them has "stolen" an update/record from another. I'll explain what I mean by way of an example:

  • Developer A is working on a project that involves changing a script include. 
  • Developer B, working in parallel on a separate task, also changes the script include.
  • The update sets are pushed. Depending on the order, at least one developer is likely to see results in production that they do not expect based on their development. 

So, how can we prevent these kinds of conflicts/confusion? 

What if we could alert a developer whenever they're viewing a record that is captured in another active update set, that does not belong to them--

Read More