What This Table Is
The sc_item_option table captures every variable response submitted when users order catalog items. When a user fills out a catalog form and clicks Order Now, ServiceNow creates one record here for each question they answered. This includes everything from simple text fields to complex reference selectors and multi-choice questions.
Owned by the Service Catalog module, this table serves as the bridge between user input and fulfillment automation. Business Rules, workflows, and Flow Designer actions query these records to customize approvals, generate configuration items, provision accounts, or calculate pricing. The data here drives the entire catalog fulfillment process from order submission through delivery.
This table doesn't extend task or any standard table—it's a standalone catalog-specific structure. Each record links to sc_req_item through the request_item reference field, creating a one-to-many relationship where one RITM can have dozens of variable responses.
In large enterprises, expect 50-200 records per catalog item order, with millions of total records over time. The table performs well for single-RITM queries but can strain when aggregating across thousands of requests without proper indexing on request_item and item_option_new fields.
When You'll Script Against This Table
You'll primarily script against sc_item_option in Business Rules on sc_req_item, catalog workflows, and Flow Designer actions triggered by RITM state changes. Script Includes that handle catalog automation frequently query this table to extract user responses and transform them into API calls or CI attributes. Scheduled Jobs also access these records for reporting and cleanup of old catalog data.
The catalog role provides read access, while catalog_admin allows full CRUD operations. Custom applications scoped to Service Catalog can access these records, but third-party scoped apps may need explicit table access configuration.
Common scripting patterns:
- Extract variable values to populate CI fields during provisioning
- Build dynamic approval conditions based on requested quantities or configurations
- Calculate total costs by aggregating pricing variables across line items
- Generate API payloads for external systems using user-provided configuration data
- Create follow-up tasks with descriptions built from catalog form responses
- Validate business rules against submitted data before moving to fulfillment
- Report on catalog usage patterns by analyzing popular variable combinations
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
Table Gotchas
The display_value field shows what users see, but value contains the actual stored data. For reference fields, value holds the sys_id while display_value shows the display name. Always use value for queries and comparisons.
Records persist even after RITM deletion due to referential integrity settings. Always check if the parent request_item still exists before processing these records in scheduled jobs or bulk operations.
- The
item_option_newfield links toitem_option_newtable, not catalog variables directly—you need to traverse through this relationship to get variable metadata - Multi-choice questions create multiple records with the same
item_option_newbut different values—don't assume one variable equals one record
Querying without request_item filtering will scan the entire table. Always include request_item in your GlideRecord queries to hit the proper index and avoid performance issues.
- The
orderfield controls display sequence but isn't reliable for programmatic sorting—use sys_created_on instead - Large text responses get truncated in list views but the full content exists in the database—use
getValue()to retrieve complete values
Related Tables
The primary relationship connects to sc_req_item through the request_item reference field. This relationship is essential—you'll almost never query sc_item_option in isolation since the variable values only make sense in context of their parent RITM. The item_option_new table provides variable metadata including names, types, and configuration details.
Through sc_req_item, you'll frequently join to sc_request for cart-level information and sys_user for requestor details. The sc_cat_item table becomes relevant when you need to understand which catalog item generated these variable responses. For automated fulfillment, you'll often cross-reference cmdb_ci when populating configuration items with user-provided data.
Developers building catalog integrations commonly query this table alongside wf_context to track workflow variables and sc_task when catalog fulfillment requires manual tasks. The combination provides complete visibility into order submission, variable capture, workflow processing, and task execution.