ServiceNow CAD Practice Exam
ServiceNow Certified Application Developer CAD
The ServiceNow Certified Application Developer certification validates the skills to design, build and deploy scoped applications on the ServiceNow platform. The exam covers six domains: Designing and Creating an Application (20%), Application User Interface (20%), Security and Restricting Access (20%), Application Automation (20%), Working with External Data (10%), and Managing Applications (10%). Questions test data models, forms, client and server scripts, access controls, GlideSystem, Workflow Studio, events, imports, REST and Git source control. This practice exam mirrors that style with single-answer and multiple-answer questions.
Question bank updated : questions, answers, explanations and chapters.
Certification Overview
- Exam name: CAD
- Vendor: ServiceNow
- Exam code: CAD
- Duration: 90 minutes
- Total questions: about 60
- Our practice exam pass mark: 70%
Who Should Take This Exam?
ServiceNow Developer, Application Developer, ServiceNow Administrator, Platform Engineer, Integration Developer, ServiceNow Consultant, Technical Architect, Software Engineer
Prerequisites
No formal prerequisite. ServiceNow recommends six months of hands-on experience developing applications in ServiceNow and the Scripting in ServiceNow Fundamentals and Application Development Fundamentals courses.
Topics Covered
- Designing and Creating an Application
- Application User Interface
- Security and Restricting Access
- Application Automation
- Working with External Data
- Managing Applications
Question Types
- Multiple Choice (Single Answer)
- Multiple Choice (Multiple Answers)
CAD Practice Questions
Our question bank contains 600+ practice questions for this certification. Sample questions from each exam chapter. Expand a question to see the answer choices. With full access, you get unlimited practice exams with randomised questions from our full question bank.
Designing and Creating an Application
What is the scope name format of a custom application created on a customer instance?
- A. global_<application name>
- B. sn_<application name>
- C. u_<application name>
- D. x_<company code>_<application name> Correct answer
Option D is correct because a custom application's scope name follows x_<company code>_<application name>, where the company code comes from the instance's company code property. The sn_ prefix is reserved for ServiceNow-built applications, global is the built-in global scope rather than a custom scope format, and u_ is only the prefix for custom fields and tables in global scope.
How should a developer model students who each enroll in many courses, where each course also has many students?
- A. Add a reference field on Student that points to Course
- B. Extend the Student table to create the Course table
- C. Create a join table with a reference field to each table Correct answer
- D. Add a reference field on Course that points to Student
Option C is correct because a many-to-many relationship is modeled with a join (many-to-many) table holding one reference field to each side, so each student-course pair is one row. A single reference field on either table, as in options A and D, only supports one related record per row, and extending Student to create Course (option B) builds an inheritance relationship, not an association.
A table in scope x_acme_inv has Accessible from set to All application scopes, with only Can read and Can create selected. A business rule in scope x_acme_ops queries a record from the table, changes a field with setValue(), and calls update(). What is the result?
- A. Both succeed, because Can read grants access to the record
- B. Both are blocked because no cross-scope privilege has been approved
- C. The query works but the update is blocked because Can update is clear Correct answer
- D. The query is blocked, but the update succeeds because Can create allows writes
Option C is correct because with Accessible from set to All application scopes, other scopes are limited to the operations ticked on the table, here read and create, and no cross-scope privilege approval is needed. The query therefore works, but update() needs Can update, which is clear, so it is blocked. Option B is wrong because privileges are not required when all scopes are allowed, and Can create does not grant updates, so options A and D fail too.
Which two tools can a developer use to create a new scoped application? (Choose two.)
- A. Script Debugger
- B. Update Set Previewer
- C. Import Set Transform Map
- D. Studio Correct answer
- E. App Engine Studio Correct answer
Options D and E are correct because Studio and App Engine Studio are the development environments in which a developer creates a new scoped application. Script Debugger is for stepping through running server scripts, Update Set Previewer is for checking an incoming update set, and an Import Set Transform Map maps imported data into a table, so none of them creates an application.
Application User Interface
Which expression returns the sys_id of the logged-in user in a client script without a server call?
- A. gs.getUserID()
- B. g_form.getUserID()
- C. g_user.getSysID()
- D. g_user.userID Correct answer
Option D is correct because g_user.userID is the client-side property holding the logged-in user's sys_id, already loaded with the form, so no server call is needed. gs.getUserID() is a server-side GlideSystem method and is not available in client scripts, and g_form has no getUserID() method. g_user.getSysID() is not a g_user API.
Which catalog item type creates a record directly in a custom table, such as x_acme_loans_application, without generating a request or requested item?
- A. Order guide
- B. Record producer Correct answer
- C. Content item
- D. Standard catalog item
Option B is correct because a record producer writes a record directly to a table of your choice, such as a custom application table, instead of creating a request and requested item. Standard catalog items and order guides generate requests and requested items when ordered, and a content item only displays content and does not create records.
Which two actions are appropriate in a before business rule that runs on insert? (Choose two.)
- A. Stop the insert by calling current.setAbortAction(true) Correct answer
- B. Call current.update() to save the new field values
- C. Set a field value on current without calling update() Correct answer
- D. Call current.insert() to create the record again
- E. Use g_form.setValue() to change a field on the record
Options A and C are correct because in a before business rule the current record has not yet been saved, so you can change its fields simply by setting them, and you can cancel the insert with current.setAbortAction(true). Calling current.update() or current.insert() inside the rule is wrong because the platform saves the record after the rule finishes, and doing so risks recursion or duplicate records. g_form is a client-side API and is not available in business rules.
On the Active checkbox, an onChange client script contains: if (g_form.getValue('active') == true) { g_form.setMandatory('u_reason', true); } A user selects the checkbox. What happens to u_reason?
- A. It stays optional, since getValue does not return values for checkbox fields
- B. It becomes mandatory once the record is saved and the form reloads
- C. It stays optional, since getValue returns the string 'true' instead of a boolean Correct answer
- D. It becomes mandatory, since the string 'true' converts to a boolean in the comparison
Option C is correct because g_form.getValue returns a checkbox value as the string 'true' or 'false', and in JavaScript the comparison 'true' == true is false, so the setMandatory line does not run and u_reason stays optional. Option A is wrong because getValue does return a value for checkbox fields. Option D is wrong because the string 'true' is not converted into a boolean in that comparison. Option B is wrong because the script does not wait for a save.
Security and Restricting Access
By default, what is the Accessible from setting of a table created in a scoped application?
- A. Global scope only
- B. This application scope only
- C. All application scopes Correct answer
- D. The scopes listed as dependencies
Option C is correct because a new table in a scoped application defaults to Accessible from: All application scopes, with only Can read selected, so other scopes can read its records but cannot create, update or delete them until the developer selects those options. This application scope only is a setting the developer chooses to lock the table to its own scope; it is not the default. Global scope only is not an Accessible from choice, and the setting does not follow the application's dependency list.
Two read ACLs exist for x_acme_case.u_notes. ACL 1 requires the role case_agent and has the script answer = current.assigned_to == gs.getUserID(); ACL 2 has no role, no script, and the condition State is Draft. The table-level read ACL passes for everyone. A user holding case_agent opens a Draft case assigned to someone else. What happens?
- A. The user can read the field because ACL 2 passes Correct answer
- B. The user can read the field because ACL 1 passes on the role alone
- C. The user cannot read the field because both ACLs must pass
- D. The user cannot read the field because ACL 1 fails
Option A is correct because when several ACLs apply to the same object, access is granted if any one of them passes. ACL 2 has no role requirement and no script, and its condition (State is Draft) is met, so it passes regardless of ACL 1. Option B is wrong because ACL 1 needs its script to return true as well as the role, and the case is assigned to someone else. Options C and D are wrong because ACL 1 failing does not deny access when another ACL on the object passes.
A list of x_acme_loans_case records shows a notice that rows were removed by a security constraint. The owner wants the platform to leave those rows out of the query itself, with no notice. What does the developer create?
- A. A before query business rule that adds a filter to the query Correct answer
- B. A client script on the list that hides the rows from view
- C. A read ACL with a script that returns false for the other rows
- D. A display business rule that removes rows from the list
Option A is correct because a before query business rule adds a filter to the query itself, so the rows never come back and no security constraint notice is shown. A client script only hides rows after they load, a scripted read ACL still produces the removed-rows notice, and a display business rule runs on single forms, not list queries.
Application Automation
When a developer creates a system property in a scoped application, what must the property name begin with?
- A. glide., the prefix used by platform properties
- B. The application's scope name and a dot Correct answer
- C. com.snc., the prefix used by plugin properties
- D. sn_, the prefix used by ServiceNow applications
Option B is correct because system properties created in a scoped application are namespaced with the application's scope name followed by a dot, for example x_acme_loans.property_name. Options A, C and D are prefixes from other namespaces (platform, plugin and ServiceNow application naming), not the scope of the application that owns the property.
A script include named calcSlaDays contains only the function declaration function calcSlaDays(start, end) { ... } and no class. Which statement calls it from a business rule?
- A. var days = calcSlaDays(start, end); Correct answer
- B. var days = new calcSlaDays().get(start, end);
- C. var days = new calcSlaDays();
- D. var days = calcSlaDays.get(start, end);
Option A is correct because a script include made of only a function declaration is a classless (on-demand) script include, so you call the function directly by name, calcSlaDays(start, end). Creating an instance with new, or calling a method such as get() on it, only applies to script includes that define a class with that method.
A client callable script include method returns the Boolean true. The client script calls ga.getXMLAnswer(function(answer) { if (answer === true) { alert('Match'); } }). What happens?
- A. The alert appears because getXMLAnswer converts it to a Boolean
- B. The alert never appears because the answer is delivered as a string Correct answer
- C. A JavaScript error is thrown because the answer is an XML node
- D. The alert appears because strict comparison coerces strings
Option B is correct because getXMLAnswer passes the callback the answer as a string, so a returned Boolean true arrives as the string 'true'. The strict comparison answer === true does not coerce types and therefore evaluates to false, so the alert never appears. No error occurs and the answer is not an XML node, because getXMLAnswer already extracts the answer text.
Working with External Data
A transform map coalesces on u_asset_tag, and its onBefore script contains: if (action == 'update') { ignore = true; }. An import set holds 100 rows, and 35 of them carry an asset tag that already exists on the target table. What is the outcome?
- A. 65 inserted, 35 updated, 0 ignored
- B. 35 inserted, 65 updated, 0 ignored
- C. 65 inserted, 0 updated, 35 ignored Correct answer
- D. 100 inserted, 0 updated, 0 ignored
Option C is correct because setting ignore = true in onBefore for update actions skips those rows, so the 35 rows that match an existing asset tag are ignored while the 65 new rows are inserted. Nothing is updated, and the ignored rows are not inserted as duplicates.
Which two methods of the response returned by RESTMessageV2.execute() give a script the HTTP status code and the payload text? (Choose two.)
- A. getBody() Correct answer
- B. getStatusCode() Correct answer
- C. getErrorCode()
- D. getErrorMessage()
- E. getHeaders()
Options A and B are correct because getBody() returns the response payload as text and getStatusCode() returns the HTTP status code. getErrorCode() and getErrorMessage() describe failures to reach the endpoint, and getHeaders() returns response headers, not the status or payload.
Which namespace qualifies the RESTMessageV2 constructor in a script that runs inside a scoped application?
- A. x_snc_rest
- B. sn_rest
- C. sn_http
- D. sn_ws Correct answer
Option D is correct because scoped applications call the REST message API through the sn_ws namespace, as in new sn_ws.RESTMessageV2(). The other names are not platform namespaces for this API.
Managing Applications
A developer committed changes on the application's branch in Studio, and a teammate has since pushed commits to the same remote branch. Which source control action brings the teammate's commits into the instance?
- A. Apply Remote Changes Correct answer
- B. Stash Local Changes
- C. Create Branch
- D. Import from Source Control
Option A is correct because pulling the commits a teammate pushed to the remote branch into the instance is done by applying the remote changes to the application. Option B only sets aside your own uncommitted local changes, and Option C creates a new branch without bringing in the teammate's commits. Option D is for importing an application from a repository, not for updating an application already linked to its branch.
Which Studio source control action connects an application already on the instance to a remote Git repository?
- A. Import from Source Control
- B. Create Branch
- C. Publish to Application Repository
- D. Link to Source Control Correct answer
Option D is correct because Link to Source Control attaches an application that already exists on the instance to a remote Git repository. Import from Source Control does the opposite, creating the application from a repository. Create Branch and Publish to Application Repository do not establish a link.
Which two actions can a developer take in Studio on an application linked to Git? (Choose two.)
- A. Retrieve an update set from a remote instance
- B. Stash Local Changes Correct answer
- C. Create Tag Correct answer
- D. Back out a committed update set
- E. Preview Update Set
Options B and C are correct because Stash Local Changes and Create Tag are source control actions in Studio. Retrieving or previewing an update set and backing out a committed update set belong to update set handling.
Free Study Guide
Read the free ServiceNow CAD study guide: every exam topic explained in plain English, with diagrams, exam tips and the mistakes to avoid.
More ServiceNow Practice Exams
Practise with realistic mock exams to prepare for your ServiceNow certification.