ServiceNow Scenario Based Interview Questions 2025

Explain the behavior of the following access control scenario in ServiceNow:

1.Users with Role A, B, and C have Read access to the table with table.none ACLs.
2.Users with Role B have Read access to all fields in the table with a table.* ACL.
3.Users with Role C have Read access to the Priority field specifically.

1. Users with Role A:

Users with Role A will not be able to access any data in the table. While they have access to the table itself at the row level (via the table.none ACL), this does not grant them any access to individual fields at the column level. Since they do not have Read access to any fields (either through * or field-specific ACLs), they will be unable to view any data in the table.

2. Users with Role B:

Users with Role B will have access to all fields on the table, except for the Priority field. The table.* ACL allows them to access all fields in the table, but a specific ACL on the Priority field restricts their access to it. Therefore, they will be able to read all fields in the table, except for the Priority field, which remains restricted.

3.Users with Role C:

Users with Role C will have access only to the Priority field. They are granted read access specifically to the Priority field via a field-level ACL. However, they do not have access to the table.* ACL, which means they cannot access any other fields on the table. As a result, users with Role C can view the Priority field but will be restricted from seeing any other data in the table.

How to show inactive incidents to only ITIL admins and hide for all other users, explain different ways to achieve this?

There are two approaches to implement this scenario :

Method 1 : Using ACL

- Write Table.None ACL on incident table to allow only ITIL admin to see inactive incident as below :


Method 2 : Using Before Query BR

- Write before query BR as shown below, it checks if logged in user has ITIL admin role or not. If user has ITIL admin role then inactive incident will be shown otherwise it will be hidden.

BR Configuration :

BR Script :

Note : Here interviewer is likely assessing your understanding of Before Query Business Rules (BR) and Access Control Lists (ACLs). They may ask follow-up questions to explore the advantages and disadvantages of each method, or inquire about which method is more preferable in different scenarios and why. Be prepared to discuss these concepts in depth.

How to show incidents to users only if they are part of current assignment group?

We can implement it by using ACL as shown below:



In workflow, We have run script activity which takes around 10 minutes to execute therefore workflow throws an error as 'Transaction Cancelled : Max execution time exceeded'. Why this issue occurs and how to resolve it?

There is transaction Qouta limit set in instance. If any transaction exceeds this limit then it gets cancelled. Generally it is set between 2 to 5mins so if we want our scenario to work then we can increase this value.

However increasing this value is not best practice or may create perormance impact, so rather you can plan to run such heavy long running scripts in background. To do so, we can write such scripts in Script Actions ( Script Actions runs asynchronously in the background ) and call them via workflow run script activity. This way workflow will trigger script in background and move ahead with next activities.

Note : Here Interviewer tries to understand if you know what script action does. They might further ask to explain different scenarios when we are supposed to write script in script actions and when to write it in script includes.

When user opens any incident which has child incident then there should be message saying for assignee group members that "This incident is parent for INCXXXXXX", child incident needs to be resolved before resolving parent incident, how to implement this scenario?

Method 1 : Display BR with On Load Client Script

We can write display BR to check if current incident has any child incident. Store result in scratchpad object and access scratchpad in on load client script to show message accordingly.

Method 2 :On Load Client Script with GlideAjax

We can write onLoad Client SCript with GlideAjax and check if current incident has any child incidents in server side code.

All catalog items under order guide moves to In Progress simulteneausly and those are being worked parallely. I want those items to be worked on sequential order one after other, how to implement this?

We need to Configure a sequence in Process Automation Designer to fulfill items in order guides. To use this functionality, the Order Guide Sequential Fulfillment (com.glideapp.servicecatalog.order_guide_sequencing) plugin must be installed.

For more details, please refer Configure a sequence to fulfill items in order guides

How to show all incidents opened by the same caller as related list on incident records?

This scenario couldn't be achieved by adding related list directly. For such type of requirement we have to create relationships as shown below where custom relation between any two table can be defined.

Relationship to show all incident with same caller as that of current incident :

Once we create above relationships, it will be available in incident related lists to add on the form as shown below :

For more details about relationships click here

How to show specific view while creating new record and different view for existing record?

We can create view rules to change view based on some conditions. Below view rules can be used to show view for new records and existing records on incident table.

This is the View Rule for new records on incident table. For testing purpose 'Cxs_popup' view has been configured for new records. Since 'Created date' is empty for new records so we can use this condition to identify if opened record is new or not:

Result :

This is the View Rule for existing records on incident table. For testing purpose 'ess'(self service) view has been configured for existing records. Since 'Created date' is not empty for existing records so we can use this condition to identify if opened record is existing record: :

Result :

For more details about View Rules click here

How to create single report on multiple tables?

We have Database View functionality in ServiceNow with which we can merge multiple tables into one. So, we can create Database View to merge multiple tables and use the same DB view table to create single report which will have multiple table already.

For more details about DB View click here

How to implement functionality where we can track how much time Incident/Problem/Change was in each state?

To implement the functionality of tracking the time an Incident, Problem, or Change record spends in each state (e.g., New, In Progress, Resolved, Closed), you can use Metrics in ServiceNow. This can be done by creating metric definitions and associating them with the state field of the respective tables (Incident, Problem, and Change).

ServiceNow provides out-of-the-box (OOTB) functionality for tracking the time spent in each state for the Incident table. The system automatically records the time spent in each state using the Metric feature, so for incidents, you don't need to implement it manually unless you need to customize or extend the functionality. The process typically works as follows:

1. Metric Definitions: These define how metrics should be tracked, including the type of metric (e.g., time spent), and specify which field or table should be monitored. ServiceNow has preconfigured metric definitions for tracking time spent in various states of an Incident record.

2. Metric Instances: For each record (Incident, Problem, Change), a Metric Instance is created whenever a state change occurs. The system will log the timestamp when the state change happens, allowing you to calculate how long the record stays in a particular state.

3. Metric Types: Common metric types for tracking time are:
State Duration: Measures the duration a record spends in a specific state.
Elapsed Time: Tracks the total time from one state to another.

For more details about Metrics and Metric Definitions click here


Prepared and confident for your interview?

Practice makes perfect! Test your skills with our virtual interview practice buddy and ensure you're fully ready for your upcoming interview.

🎯 Start Practicing

Real Interview Questions & Answers

Questions shared by ServiceNow professionals and reviewed for clarity, relevance, and interview usefulness.

Gvk 2025-09-08 10:34:43

What is the use of OnDemand scheduled job? In ServiceNow, an on-demand scheduled job is a task that doesn't run on a fixed, recurring schedule but is triggered to execute immediately when manually initiated, either through the "Execute Now" button on the scheduled job's form or programmatically via server-side scripts like Business Rules or Script Includes. The primary use is to run a specific task, such as data updates or imports, at an opportune moment outside its regular cycle, offering flexibility and control over automation efforts. When to Use an On-Demand Scheduled Job Manual Triggering: You can run the job as needed by simply clicking the Execute Now button available after saving the scheduled job. Scripted Triggering: You can use server-side scripts, like Business Rules or Script Includes, to programmatically start the job when a specific event occurs in the system. One-Time Operations: On-demand jobs are ideal for tasks that need to be performed once, like importing a spreadsheet of user details, and then repeating the process when new data is available. Ad-Hoc Data Updates: When you need to update records or synchronize data based on a specific trigger, but not on a fixed schedule, an on-demand job provides the necessary control. How to Trigger an On-Demand Scheduled Job 1. Manually: Open the Scheduled Job record. Click the Execute Now button, which appears in the top right of the form after you save it. 2. Programmatically (using Server-Side Script): Identify the Scheduled Job you want to run. Use a script, such as a Business Rule, to find the Scheduled Job's record. Utilize the SncTriggerSynchronizer.executeNow()() method to trigger the job from the script

0 Helpfuls


Hans Raj 2025-08-05 12:33:36

I was asked a question in an interview that, if there were a scheduled job that ran every 2 hours and fetched millions of data points. However, since it involves a lot of data, executing it completely can sometimes take up to 3 hours. So how will you handle this situation so that you won't lose the data or get any errors?


Vinita Kushwah 2025-08-22 00:35:40
I will implement a job locking mechanism so that a new execution won’t start if the previous one is still running. Additionally, I would optimize the job by processing data in smaller batches and using a checkpoint (last run time/sys_id) so that if a run is skipped, the next run resumes without losing data.
0 Helpfuls
snowexpertaastik 2025-09-05 10:33:40
You can handle this by adding a mutex/flag check before the job starts, so a new run won’t trigger if the previous one is still active. Another option is to use job queues or break the process into smaller batches with checkpoints. This way you avoid overlaps, ensure data integrity, and reduce errors.
0 Helpfuls
0 Helpfuls


Suganya 2025-06-30 11:48:52

You have To show only groups where current logged in user is member of those groups when user selects assignment group field


Sridhar G 2025-12-05 06:40:23
We can get this from Querying the "sys_user_grmember" Table.
0 Helpfuls
0 Helpfuls


Heisenberg 2024-12-24 13:13:03

As a project manager, I want to send a reminder notification after 3 days when incident is Resolved but not closed. What are the different ways to achieve this requirement?


Divesh Jalandriya 2025-05-22 02:19:49
You can create a Scheduled Job that runs daily on the Incident table to check for incidents in the Resolved state. For each resolved incident, retrieve the current date and the date it was moved to the resolved state (from the sys_updated_on). Then calculate the difference between the two dates using the getDays() method. If the difference is equal to or greater than 3 days, you can trigger a notification to the appropriate user or group. Something like, var gr = new GlideRecord('incident'); gr.addQuery('state', '6'); // Resolved state (change as per your state value) gr.query(); var today = new GlideDateTime(); while (gr.next()) { var resolvedDate = gr.sys_updated_on; // get the date on which incident was resolved var resolvedDateTime = new GlideDateTime(resolvedDate); // convert date to dateTime var diff = GlideDateTime.subtract(today, resolvedDateTime); //you will getthe value in dateTime format var daysPassed = diff.getNumericValue() / (1000 * 60 * 60 * 24); // convert the value in diff to days by dividing it by ms*sec*min*hrs of a day it will give you numeric value of days if (daysPassed >= 3) { // Example: Send notification or log info gs.info("Incident " gr.number " has been resolved for " Math.floor(daysPassed) " days."); // Optional: Trigger an event to send a notification gs.eventQueue("event_name_to_trigger_notification", gr, gr.sys_id, gr.number); } }
0 Helpfuls
Kams 2026-01-07 18:32:35
var gr = new GlideRecord('incident'); gr.addQuery('state', 6); // Resolved gr.addEncodedQuery('resolved_atRELATIVELE@dayofweek@ago@3^resolved_atRELATIVEE@dayofweek@ago@4'); gr.query(); while (gr.next()) { gs.eventQueue('incident.resolved.reminder', gr, gr.assigned_to, gr.caller_id); }
0 Helpfuls
0 Helpfuls


service-now developer 2024-07-28 01:42:40

Interview question: Hide child incident related list when incident assignment group> type is not itil. How will you solve this?


Vaibhav 2024-09-17 09:19:50
Create UI Policy for the form with condition as field 'Action' is No. To hide the related list Add the below code in the Execute if True script section. g_form.hideRelatedList('related_list_table_name'); To show the related list Add the below code in the Execute if False script section. g_form.showRelatedList('related_list_table_name'); Note: Get the related_list_table_name from thee list control of the related list. Right click related list header > Personalize/Configure List Control. Copy the value from the field 'Related list'
1 Helpfuls
0 Helpfuls


Venkat 2024-05-09 09:32:07

If there is a custom field on click of UI action I want to populate count of incident which are from same assignment group and I want to show this field to only admin or ITIL user which modules you will use for this?


Mudit 2024-09-10 04:03:44
for custom field you can use UI policy to show field to adin aor itil user and for count of incident for same assignment group you can use a display br to fetch count and then pass the count in a g_scratchpad to a on load client script.
0 Helpfuls
anonymous 2024-11-27 06:54:01
in the ui action you can use GlideAggregate API to get the incident count and update the count_field. for field visibility create read ACL for admin and itil roles. OR write a client script to show/hide count field like this: function onLoad() { var isAdmin = g_user.hasRole('admin'); //console.log("isAdmin: " isadmin); if (isAdmin == true) { g_form.setDisplay('count_field', 'true'); } else { g_form.setDisplay('count_field', 'false'); } }
0 Helpfuls
0 Helpfuls


Paras Belorkar 2024-05-06 06:35:15

Current logged in user should see only those incidents which are assigned to those groups which he/she is member of. Suppose a user is member of 3 groups. Please explain with the script.


Sreedhar 2024-10-07 09:51:15
Use below code in Read ACL for Incident table. Add itil role in roles.. or whatever is generic.. var checkMember = gs.getUser().getUserId(); if(checkMember.isMemberOf('Group1')
0 Helpfuls
Abel Tuter 2024-12-01 00:57:41
Hi , You can write Below Before Query Business Rule - (function executeRule(current, previous /*null when async*/ ) { var groups = gs.getUser().getMyGroups(); current.addQuery('assignment_group', 'IN', groups); })(current, previous);
0 Helpfuls
0 Helpfuls


Manal Aquil 2024-02-22 02:04:35

If an organisation is using multiple tools, then how we can synch up data of all the tool .


Priyanka 2024-04-17 00:29:17
By Implementing integration between them
0 Helpfuls
0 Helpfuls


Vishnu Priya 2024-01-10 07:13:06

When user opens any incident which has child incident then there should be message saying for assignee group members that "This incident is parent for INCXXXXXX", child incident needs to be resolved before resolving parent incident, how to implement this scenario?

0 Helpfuls


Alaya 2023-12-18 20:51:51

I was asked in interview: On the incident form generally assigned to field is dependent on assignment group. What will happen if we remove the assignment group from the form, will assigned to field still be dependent on assignment group or will it show all the users?


Khaleed 2024-01-18 09:34:49
It will show all the users.
0 Helpfuls
Sharath 2024-06-26 06:03:44
It will show all the ITIL users as per the default Use reference qualifier.
0 Helpfuls
Bushra 2024-10-14 23:07:17
Add assignment_group(backend name of group field) in the dependent value of assigned_to field
0 Helpfuls
0 Helpfuls


Atharva Chavan 2023-09-23 07:15:58

Use of Jelly Script with an example

2 Helpfuls


Harika 2023-09-07 23:36:06

I need to create a catalog item, in that catalog item I need to generate 10 catalog tasks simultaneously. How can I achieve this?


Rohit 2023-09-20 13:04:31
create a Workflow that will be associated with your catalog item. This workflow should define the logic for generating 10 catalog tasks simultaneously.
0 Helpfuls
0 Helpfuls


Satyapriya Biswal 2023-04-10 17:41:07

What is the code to execute a scheduled job from a serverside script?


Vardha 2023-04-11 00:41:02
scheduled job is used for server side scripting on a scheduled basis. You do not need to trigger it via some other script. Can you please elaborate what you are trying to achieve here?
0 Helpfuls
Satyapriya Biswal 2023-04-11 03:06:00
Can you please tell me What is the use of Ondemand scheduled job?
0 Helpfuls
Raj 2023-04-11 05:19:55
Hi Satyapriya, Scheduled job can be executed by using gs.executeNow method in server side script, we need to pass scheduled job glide object as parameter as shown below : var grSchedJob = new GlideRecord('sysauto_script'); if(grSchedJob.get('SCHEDULUD_JOB_SYS_ID_HERE')){ gs.executeNow(grSchedJob); } More info can be found on 'https://www.servicenow.com/community/developer- forum/what-is-the-sys-id-gs-executenow-is-returning/m-p/1577551/page/3' Note : The above script can be found on 'Execute Now' UI action which is available on scheduled job form.
1 Helpfuls
Satyapriya Biswal 2023-04-11 05:41:40
Thanks Raj
0 Helpfuls
1 Helpfuls








🚀 Power Up Your ServiceNow Career

Join a growing community of smart ServiceNow professionals to stay ahead in interviews, sharpen your development skills, and accelerate your career.

Fuel My Passion

Loving the content? Well, of course you are. Here’s your chance to indirectly fuel the chaos that keeps this website running. Your contribution helps keep the wheels turning and allows me to continue pretending to be a responsible adult—while cranking out more content for you. Thanks for supporting my delusional dreams and helping me keep this website alive!


Buy Me a Coffee

Support with UPI

If you prefer making a UPI payment to support the website maintenance cost, scan the QR code below:

UPI QR Code

Comments

Khushboo 2025-01-31 06:40:12
This is an amazing collection of interview questions and answers! I particularly appreciate how it covers rarely used functionalities. I’ve been asked similar questions multiple times, and I now regret not reviewing this questions earlier.



Pooja 2024-09-12 09:33:50
Nice Content



Garima Dubey 2023-05-17 08:54:57
Please introduce Scheduled Job-based Questions