ServiceNow Certified Application Developer

SERVICENOW · Certified Application Developer (CAD)

By Mr Sparkles

Cheat Sheet

ServiceNow CAD Exam Mastery

Certified Application Developer

Please use my guide to finalize your training for the ServiceNow CAD exam. Reproduction of this is not allowed.

Created by:Mr. Sparkles

The Golden Rules

  • If a UI Policy can do it, do not open a Client Script. Save the script for logic that actually branches.
  • A module role only hides the menu. If the exam asks who can read the row, the answer is almost always an ACL.
  • Calling current.update() inside a before Business Rule is a classic fail. The platform already saves. That call loops you into pain.
  • New work goes in a scoped app. Global is the exception you justify, not the default.
  • Managing Applications is about a quarter of the exam. If you only drilled GlideRecord, you are underprepared.
  • Returning records to a portal user? Prefer GlideRecordSecure. Plain GlideRecord will happily ignore the caller's ACLs.
1

Blueprint Weights ~60 Q / 90 min

DomainWeight
Managing Applications25%
Security and Restricting Access20%
Working with Data20%
Automating Applications20%
Application User Experience10%
Design and Development Concepts5%
Reality check: Weights and fees shift by release. Confirm the live blueprint on ServiceNow University before you book.
2

Decision hierarchy Design 5%

  1. Out-of-box platform features first
  2. Declarative tools next (UI Policy, Flow, Data Policy, dictionary)
  3. Script only when declarative cannot express the rule
  4. Scoped apps for new work; avoid global unless forced
  5. Ship ATF coverage for the paths that break production
Good fit vs poor fit

Usually a fit

  • Task / request / approvals
  • Forms + notifications
  • Repeatable orchestration

Usually a poor fit

  • Unstructured docs as system of record
  • Heavy GPU / CAD graphics
  • Streaming A/V as the product
3

Scope & tools

ScopedGlobal
Default for new apps; namespace prefixLegacy / shared customizations
Application Access + App Repo + GitUpdate sets for config bundles
Delegated Development supportedNo Delegated Development
ToolUse when
StudioFull files, scripts, ACLs, source control
App Engine StudioGuided / simpler app creation
Guided App CreatorBootstrap scoped app (roles, tables, menu)
Extend a table when parent fields or logic help (Task approvals, inheritance). Skip extend for seed/reference-only data, or when parent logic will fight your design.
4

Security picker 20%

NeedUse
Hide module / menuMenu / module roles
Block row or field dataACL (server)
Rules on form + import + APIData Policy
Other scope reads/writes your tableApplication Access
Script returns user-visible rowsGlideRecordSecure
Assign permissions to peopleGroup → roles
Trap: Passing a module role does not grant table CRUD. Menu visibility is not data access.
5

ACL sequence

  1. Scope / Application Access can block cross-scope work first
  2. Table ACL for the operation (create/read/write/delete). Fail table, get no fields.
  3. Field ACL if present. Pass table, fail field, field denied.
  4. Within an ACL: roles + condition + script must all pass
  5. No matching ACL → default deny
Table ACL Field ACL security_admin elevate Debug Security Rules Impersonate
Client checks like g_user.hasRole() are UI convenience only. Never treat them as the security boundary.
6

UX picker 10%

NeedPrefer
Show / hide / mandatory / read-onlyUI Policy (+ Reverse if false)
Complex browser logicClient Script
Trusted validation alwaysBusiness Rule or Data Policy
Button / link / context menuUI Action
Catalog-style create UIRecord Producer
Client needs server lookupGlideAjax → client-callable Script Include
Workspace / Now ExperienceUI Builder
Classic portal widgetsService Portal
Client Script types
onLoad onChange onSubmit onCellEdit
UX gotchas
  • Order: Client Scripts generally run before UI Policies on the form. If both fight over the same field, know which one actually wins in your scenario.
  • Conflict: UI Policy marks a field mandatory, Client Script marks it read-only. The user can get stuck: required value they cannot edit. Design one owner for that field.
  • Performance: Avoid synchronous GlideAjax. It freezes the browser. Async callbacks only.
  • Loop trap: g_form.setValue() inside an onChange can re-fire onChange. Guard it.
7

UI Policy vs Client Script vs Data Policy

UI PolicyClient ScriptData Policy
WhereBrowser / formBrowserServer (all interfaces)
Code?OptionalYesNo
Import / REST?NoNoYes
g_form.getValue('field'); g_form.setValue('field', 'value'); g_form.setMandatory('field', true); g_form.setDisplay('field', false); g_form.setReadOnly('field', true);
Exam angle: Need the rule on import and web services too? That is Data Policy, not a UI Policy.
7b

g_scratchpad vs GlideAjax

g_scratchpadGlideAjax
WhenForm load (Display Business Rule packs data)On change / on demand after the form is open
Best forValues you already know you need on openLookups that depend on what the user just typed
Server pieceDisplay BR sets g_scratchpad.fooClient-callable Script Include + AbstractAjaxProcessor
Client pieceRead g_scratchpad in onLoad / onChangeGlideAjax + getXML / getXMLAnswer
Rule of thumb: Know it at load time? Scratchpad. Depends on a field the user just changed? GlideAjax.
8

Data & imports 20%

ConceptMeaning
DictionaryField metadata
ReferenceFK; enables dot-walking
M2MJoin table between two tables
Data PolicyField rules on every interface
Import workflow
  1. Load Data → Import Set (staging)
  2. Transform Map maps source → target
  3. Coalesce decides insert vs update
  4. ACLs / Data Policies still apply on the target

Import Set

  • Stages raw rows
  • Temporary table
  • Does not finalize target

Transform Map

  • Writes real records
  • Field maps + coalesce
  • Insert / update / reject
9

Automation picker 20%

NeedPrefer
Change fields before commitBefore Business Rule
React after saveAfter Business Rule
Heavy / slow workAsync BR or event + Script Action
Scratchpad for form loadDisplay BR → g_scratchpad
Readable multi-step processFlow Designer
Reusable server libraryScript Include
Client → server round tripGlideAjax + client-callable SI
Timed housekeepingScheduled Script Execution
Flow Subflow Action Data pill IntegrationHub spoke
10

Business Rule timing

WhenNotes
BeforeMutate current; can abort; no current.update()
AfterAlready committed; watch recursion if you update again
AsyncLater; no reliable user-session UI
DisplayBuilds g_scratchpad for the client
current / previous current.operation() current.changes() current.field.changes()

Lower Order runs first (default 100).

11

Scripting quick hits

APIUse
GlideRecordTrusted server DML/query
GlideRecordSecureHonors ACLs for current user
GlideAggregateCOUNT/SUM/AVG without loading every row
GlideSystem (gs) you should know cold
MethodWhat it does
gs.hasRole('x')Role check on the server
gs.getUserID()Current user sys_id
gs.getUserName()User name string
gs.addInfoMessage()Session info banner
gs.addErrorMessage()Session error banner
gs.info() / gs.warn() / gs.error()Server logs
gs.eventQueue()Queue an event for notifications / Script Actions
gs.getProperty()Read a system / app property
var gr = new GlideRecord('incident'); gr.addQuery('active', true); gr.addEncodedQuery('active=true^priority=1'); gr.setLimit(50); gr.query(); while (gr.next()) { /* ... */ } gr.setWorkflow(false);
Never direct SQL. Never lean on client-side GlideRecord for real lookups. Use GlideAjax.
12

Integrations

DirectionTooling
Inbound table CRUDTable API /api/now/table/{table}
Inbound custom contractScripted REST API
Outbound HTTPREST Message / Flow REST / IntegrationHub
AuthBasic, OAuth 2.0, mutual TLS
SecretsConnection & Credential Alias
Pattern: Table API when the contract is table-shaped. Scripted REST when the external schema does not match your tables.
13

Managing applications 25% - study hard

MechanismBest for
Update SetConfig changes, global fixes, operational bundles
Application RepositoryVersioned scoped app install / upgrade / publish
Source Control (Git)Peer review, branching, Studio ↔ Git
NeedPrefer
Move scoped appApp Repository
Global / config changeUpdate Set
Non-admin contributorsDelegated Development (scoped only)
Regression proofATF + impersonation steps
ACL mysteryImpersonate + Debug Security
Trap: Scoped apps are products (repo). Update sets are change packages. Do not treat them as interchangeable.
Managing Applications gotchas

Delegated Development (scoped only)

  • Lets non-admins work inside an app with limited file types
  • Common grants: tables & forms, ACLs & roles, scripting, Flow Designer
  • Source control and integrations can be part of what you allow or withhold
  • Global apps do not get Delegated Development. Full stop.

Application Access on a table

  • Can read / create / write / delete: what other scopes may do to records
  • Accessible from: this scope only vs all application scopes
  • Allow configuration: other scopes may add BRs, Client Scripts, UI Actions, fields (needs "all scopes")
  • Allow access via web services: inbound Table API / web services still need user ACLs
Cross-scope silence: Your script "finds zero rows" but data exists. Check Application Access and cross-scope privileges before you rewrite the query.
!

Common traps

TrapReality
Module role = data accessModule only hides navigation
Client Script = securityACLs / Data Policies enforce data
current.update() in before BRSystem already saves
Import Set "loads" prod tableStaging only; Transform writes target
UI Policy blocks importsIt does not. Use Data Policy.
Scope failure = "no rows"Often Application Access
Study only scriptingManaging Apps is 25%

Last-minute checklist

  1. Managing Apps: update sets, repo, Git, ATF, delegated dev, Application Access
  2. ACLs: table then field; roles + condition + script; default deny
  3. UI Policy → Client Script → Data Policy for all interfaces
  4. Before BR mutates current without current.update()
  5. Flow for process; BR for commit-time data; Script Include for libraries
  6. g_scratchpad at load; GlideAjax on demand
  7. GlideRecordSecure for user-facing returns
  8. Coalesce on transforms; Import Set ≠ target
  9. Impersonate to validate security

Discussion

No comments yet.

Log in to comment.