Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Voona Rohila
Mega Patron
Mega Patron

ServiceNow Ninja Moves: Features Hiding in Plain Sight 

 

I recently delivered this session to 200+ community members💚 and the response was incredible💃. Here's what surprised me most: some of these features felt familiar to me, but they were completely new to others. That's exactly why I wanted to bring them together. We all explore ServiceNow differently - what seems like a small feature to one person can be a game-changer for someone else.

 

ServiceNow is a massive platform, but the most powerful capabilities aren't always buried deep in complex modules or advanced architectures. Some of the best features sit quietly in corners we rarely visit. These hidden gems, smart tricks, and coding tips can transform your development workflow - let's dive into these ninja moves that are hiding in plain sight.

 

Access Analyzer - Debug User Permissions Like a Pro 🔍

When a user reports "I don't have access," the real question becomes: why?

Access Analyzer helps you quickly identify:

  • Which ACL (Access Control List) allowed or denied access
  • Why a particular user can or cannot perform an action
  • Side-by-side comparison of two users' permissions
  • Gaps or misconfigurations in your security rules
  • You only need the access_analyzer_admin role.

This tool drills into ACL evaluation logic, giving you instant visibility into complex permission hierarchies without manually tracing through dozens of ACL rules.

 

Track Down Which Record Producer Created a Record 🎟

Ever wondered which catalog item or record producer generated a specific record, like an Incident?

The answer lives in: sc_item_produced_record

This table stores the mapping between catalog requests and the records they produce. It's incredibly helpful for:

  • Debugging catalog-driven workflows
  • Understanding unexpected field values
  • Tracing the origin of automatically generated records

 

Audit Role Changes with sys_audit_role 🛡

Need to track when and by whom roles were added or removed for a user?

Enable role auditing by setting this system property:

glide.role_management.v2.audit_roles = true

 

Every role update, even those inherited through groups gets captured in the sys_audit_role table. This provides a complete audit trail for compliance and troubleshooting.

 

Quickly Check Report and Dashboard Permissions 📊

Instead of manually opening each report or dashboard to check access:

  • Reports: sys_report_users_groups - Shows users/groups with report access
  • Dashboards: pa_dashboards_permissions - Dashboard visibility and permissions

Instant visibility into who has access to critical analytics - no more clicking through individual items.

 

Enable Group By for Any Dictionary Field 📁

Want to group list views by a custom field that doesn't show the Group By option?

Add this dictionary attribute: can_group = true

 

The Group By option will instantly appear in list controls for that field, both in form and list views.

 

The Magic Behind Percent Complete Progress Bars 🎯

Ever wondered how those colorful progress bars work in ServiceNow?

They're driven by a special dictionary type called Percent Complete. This field type automatically renders as a visual progress bar in both form and list views.

But here's the hidden gem: you can customize the colors based on completion thresholds using the target_threshold_colors attribute:

target_threshold_colors=0:#71e279;50:#fcc742;75:#fc8a3d;100:#f95050

 

You can customize these thresholds and colors to match your business logic, making visual indicators more meaningful and aligned with your workflow needs.

 

Beware: Invalid Encoded Queries Don't Always Fail ⚠️

Here's a hidden troublemaker many developers don't know about:

glide.invalid_query.returns_no_rows = false (default)

 

When this property is false, invalid portions of encoded queries are simply ignored rather than causing the query to fail. This can be risky, especially for updateMultiple() or deleteMultiple() operations where you might unintentionally affect more records than intended.

Always validate your encoded queries, especially in bulk operations.

 

Hidden GlideRecord Helper Methods 🧩

Three powerful methods that aren't commonly discussed:

getLink(true) - Generates a direct URL to the record. Perfect for creating references in tickets

setForceUpdate(true) - Forces an update even if no fields changed. 

setUseEngines(false)- Disables or enables engine execution, including Approval rules/Assignment rules/Data policies

 

Use these carefully - they're powerful but can bypass important business logic.

 

Store Extra Metadata for Attachments 📎

Need to track additional context about uploaded files beyond the standard attachment fields?

Use the hidden table: sys_attachment_attribute

This allows you to store metadata like:

  • Source system
  • Author information
  • Integration tags or details
  • Internal/external classification flags and Many more

Access this functionality through:

  • GlideSysAttachment.addAttribute()
  • GlideSysAttachment.fetchAttribute()
  • GlideSysAttachment.addMultipleAttributes()
  • GlideSysAttachment.fetchAllAttributes()

 

Flow Designer Organization Tricks

Make your Flow Designer workspace more manageable:

 

Flow Priority - Controls which flow runs first when multiple flows trigger on the same event. Options: High/Medium/Low.

Flow Tags/Categories - Add tags or categories to flows for quick filtering and better organization.

Find Related Flows for a Table - Navigate to <table_name>.config and go to the Flows tab. This instantly shows all flows related to that table - no manual searching required.

 

GlideRecordUtil - Write Cleaner, Safer Code 🔧

GlideRecordUtil is a script include utility class that simplifies working with extended tables and configuration items.

 

getTables(tableName) Returns the complete hierarchy of ancestor tables for a specified table.

getGR(baseTable, sys_id) Returns the correct GlideRecord object for a base table using just the sys_id of the record.

getCIGR(ci_sys_id) Returns the GlideRecord object for a child configuration item using just the CI's sys_id.

 

 

//Before GlideRecordUtil:
var gr = new GlideRecord('cmdb_ci');
if (gr.get(ci_id)) {
    var table = gr.sys_class_name;
    var gr2 = new GlideRecord(table);
    if(gr2.get(ci_id))
        gs.print(gr2.os);
}
//After GlideRecordUtil
var ci = new GlideRecordUtil().getCIGR(ci_id);
gs.print(ci.os);

 

 

Workspace View Rules 🖥

Similar to traditional View Rules but specifically for Workspaces.

Workspace View Rules (sysrule_view_workspace) force a specified view to be used in workspace based on User roles/Conditions

 

For example, you can automatically display a "New Record View" for new incident records in workspace, or show different views based on priority or assignment group.

Navigate to: Workspace Experience > Forms > Workspace View Rules

 

Identify the Current Workspace View 👀

Need to know which workspace view is currently applied?

  • Open any record in Workspace
  • Click on the Profile Icon
  • Select Configure Page
  • Go to Form Layout

This shows you the active view applied and all its sections - perfect for debugging workspace configuration issues.

 

A Note About the Demos

All features were demoed live during the session but not included here as steps. Each one is already well documented in ServiceNow docs - this article focuses on awareness and use-cases.

 

Final Thoughts: Small Tricks, Big Impact 💥

Often, it's the small, overlooked features that:

  • Speed up your development
  • Improve your debugging
  • Make your solutions cleaner
  • And yes - make you look like a pro

The real lesson? Don't stop exploring🔍 Stay curious👀. ServiceNow is full of these hidden gems, and discovering them is what makes working with this platform so rewarding.

 

These features are just the beginning - there are so many more hidden utilities and tricks waiting to be discovered. Keep digging into those corners you haven't visited yet. The next feature you discover might be exactly what someone else needs to know.

 

Check out my Flow Designer Secrets article  for features that'll make your automation work smoother, smarter, and more fun and yes, I'm already planning the next session or article with even more features

 

Happy developing! 🚀

Version history
Last update:
an hour ago
Updated by:
Contributors