What This Table Is
The sc_request table stores Service Catalog orders—the parent record that ties together everything a user ordered in a single shopping cart session. When someone orders multiple catalog items (like a laptop, software license, and parking pass), ServiceNow creates one sc_request record and multiple child sc_req_item (RITM) records underneath it.
This table extends task, inheriting all task fields like state, assigned_to, and priority. The Service Catalog module owns this table and uses it to orchestrate the entire order lifecycle—from initial submission through approval workflows, fulfillment tracking, and final delivery confirmation.
The sc_request drives state management for the entire order. While individual RITMs can have different states (one approved, another waiting for approval), the parent request aggregates these states to show overall order progress. The stage field tracks high-level workflow phases like 'Waiting for Approval' or 'Fulfillment', while state provides granular status details.
In large enterprises, this table sees heavy volume—thousands of new records daily during onboarding seasons or hardware refresh cycles. Each record typically exists for weeks or months as orders move through approval chains and fulfillment processes. The table performs well at scale, but complex queries joining multiple child RITMs can become expensive without proper indexing strategy.
When You'll Script Against This Table
You'll script against sc_request primarily in Business Rules (especially on RITMs that need to update parent state), Script Includes for catalog workflows, and Scheduled Jobs for SLA monitoring. Catalog Client Scripts rarely touch this table directly—they work with the catalog item forms that eventually create the request. Flow Designer actions frequently query this table to route approvals or trigger notifications.
Access is controlled by standard catalog security plus the catalog role for administrative operations. Users can see their own requests, approvers can see requests awaiting their approval, and catalog admins see everything. Cross-scope access works normally—requests created in global scope are accessible from scoped apps with proper ACLs.
Common scripting patterns:
- Business Rules on
sc_req_itemthat query the parent request to update aggregated fields - Scheduled Jobs that find overdue requests and escalate or send reminder notifications
- Script Includes for approval workflow logic that need to check request-level conditions
- Reporting scripts that aggregate spending, request volume, or fulfillment metrics by department
- Integration scripts that sync order status to external procurement or asset management systems
- Portal widgets that display 'My Orders' dashboards with request summaries and RITM breakdowns
- Flow actions that route requests to different approval chains based on cost thresholds or item types
Table Gotchas
The state field inherits from task but uses catalog-specific state values (1=Draft, 2=Waiting for Approval, 3=Approved, etc.). Don't assume standard task states.
request_state is a separate field from state—it's a choice field that mirrors state values but as strings. Scripts often query the wrong one.
- The
pricefield stores the total cost of all RITMs, but it's calculated—don't set it directly. Updates happen automatically when child RITM prices change. - Queries on
requested_forare fast (indexed), but joining to child RITMs in the same query can be expensive. Query the request first, then get RITMs separately.
The approval field points to the latest approval record, not all approvals. Use approval_history or query sysapproval_approver separately for complete approval chains.
- Business Rules on this table fire for every RITM state change because RITMs update their parent request. Performance-sensitive rules should check
current.operation()and exit early for unnecessary updates.
Use GlideAggregate on this table for reporting—it handles the large record volumes better than looping through individual records.
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
Related Tables
The task table is the parent—all task functionality like assignments, work notes, and SLAs work here. The sc_req_item table contains the child records that represent individual catalog items within each request. This parent-child relationship is the core of catalog order management—you'll constantly join between these tables.
The sys_user table connects through requested_for and opened_by for user lookups. The sysapproval_approver table tracks approval workflows, and you'll often query both together to build approval status dashboards. The sc_cat_item table defines the catalog items being ordered, connected through the child RITMs.
For reporting and integration work, you'll frequently join with sys_user_group (through user department fields), cmn_cost_center for financial tracking, and cmdb_ci when catalog items create or modify configuration items during fulfillment.