UI Builder Tips #1: The Tables Behind UI Builder

Reece PoulsenReece Poulsen
9 min read

UI Builder Tips Series

Welcome to the UI Builder Tips series! I'll use this series to document what I've learned while working with ServiceNow's UI Builder. Since this is a learning process, these blog posts should be seen as a set of notes.

The content of these posts will likely change often to include new information as I continue to learn. Feel free to leave feedback or corrections in the comments, and I'll update the posts as needed. Let's learn together!

Exploring the Tables Behind UI Builder

ServiceNow's UI Builder is a powerful tool that lets users create customized workspace pages and experiences using a simple, low-code, drag-and-drop interface. This interface hides the complexity of modern web development but still offers a lot of control and customization.

Most of the time, you can use UI Builder without worrying about the tables working behind the scenes. However, there may be times when you need to dive into the backend to fix something. If you find yourself in such a situation, you might notice there's not much documentation to help you. Here is a list of the tables I have encountered, each with a short description of what the table does and a screenshot of the backend form.

UX Component Definition (sys_ux_lib_component)

This table contains definitions for all components that are available to be added to a UI Builder page, including custom components. It is referenced in a lot of other UX tables hence the many related lists.

UX Application (sys_ux_page_registry)

Each one of the records in this table represent a different experience/workspace in UI Builder.

UX App Configuration (sys_ux_app_config)

This table holds configurations for different workspaces/experiences. This record is used to:

  • Specify a landing path for the workspace

  • gather all of the routes inside of the workspace

  • gather all of the screens in the workspace

UX App Route (sys_ux_app_route)

This record shows a route within a given workspace. It holds important information like the fields (required params) and the optional params that are available for the route.

UX Screen Collection (sys_ux_screen_type)

A screen collection record corresponds to a group of page variants in UI Builder. When you see multiple variants under the same parent, the screen collection record is that parent. It also ties a route to the list of variants.

UX Screen (sys_ux_screen)

UX Screens are the same thing as variants. A variant record ties together:

  • The screen collection (which has the route)

  • Conditions for when to display this variant

  • The actual macroponent definition of the variant's contents

  • And some other things

UX Macroponent Definition (sys_ux_macroponent)

The macroponent definition is probably the most important record in all of UI Builder. When you are editing a page in UI Builder, you are editing the macroponent record. Its a higher-order component (macroponent) that arranges a bunch of lower-order components (microponents). The macroponent record defines:

  • The layout of your page

  • The composition of your page

  • The data your page pulls in

  • Any custom events that your page handles internally

  • The properties (aka URL params, both required and optional) that your page accepts

  • The initial client state of your page

  • And many other things

Many of the fields on the macroponent record contain JSON so be very careful when editing their contents.

If you are having problems with a page and you need to start investigating on the backend, always start here.

UX Page Properties (sys_ux_page_property)

UX Page Properties are like System Properties for individual workspaces/experiences in UI Builder. Here are some common ones that you will see on most experiences:

  • chrome_main

  • chrome_header

  • chrome_footer

  • chrome_toolbar

  • chrome_tab

You can also add custom UX Page Properties to hold values for your workspace.

UX Event (sys_ux_event)

Any kind of event that you see in UI Builder lives in this table. When you want to fire off and handle a custom event, the first step is to create a record in this table.

UX Add-on Event Mapping (sys_ux_addon_event_mapping)

This table allows you to tie an event firing to a declarative action on a given macroponent.

UX Client Script (sys_ux_client_script)

UX Client Scripts are scripts that are reusable on a given page. When you add a new client script at the bottom left corner of UI Builder it creates one of these records. These scripts can reference client script includes when a client script include is added as a dependency.

The UX Client Scripts table also contains the scripts that are created when you data bind a script to a specific field on a UI Builder field.

Client Script Includes (sys_ux_client_script_include)

Client Script Includes can be referenced in Client Scripts in UI Builder. This should feel familiar to those who use Script Includes on the backend. These scripts can be reused across multiple pages.

πŸ“’
It is important to recognize that all scripts that run in UI Builder don't have access to traditional server-side api's like GlideRecord or client-side api's like g_form. These scripts run on the client and only have access to the objects passed into the parameters of the functions.

Data Brokers (sys_ux_data_broker)

The Data Broker table is the parent table to all data brokers. Here are it's children:

LabelName
Composite Data Brokersys_ux_data_broker_composite
GraphQL Data Brokersys_ux_data_broker_graphql
Proxied Data Brokersys_ux_data_broker_proxy
REST Data Brokersys_ux_data_broker_rest
External REST Data Brokersys_ux_data_broker_rest_external
Data Broker Scriptletsys_ux_data_broker_scriptlet
Simple Data Brokersys_ux_data_broker_simple
Data Broker Server Scriptsys_ux_data_broker_transform

When creating a custom data broker, you will choose from one of these types. Each type has unique configuration options and forms, but the main idea is the same: get data into UI Builder.

Other Tables

If the table you are looking for is not listed above, please post a comment on this blog post and check back later as this list will be continually updated. There are 117 tables related to UI Builder (as of Washington DC) so creating a comprehensive list will take a while. I will keep updating this list as I learn more about each table.

A Complete List of UI Builder Tables

LabelName
UX Actions Configurationsys_ux_action_config
UX Add-on Event Mapping βœ…sys_ux_addon_event_mapping
UX Parent Application βœ…sys_ux_app
Audiencesys_ux_applicability
Layout Applicabilitysys_ux_applicability_m2m_layout
List Applicabilitysys_ux_applicability_m2m_list
Screen Applicabilitysys_ux_applicability_m2m_screen
UX App Configuration βœ…sys_ux_app_config
UX App Propertysys_ux_app_property
UX App Route βœ…sys_ux_app_route
UX Asset Cache Bustersys_ux_asset_cache_buster
UX Auto Reflow Enginesys_ux_auto_reflow_engine
UX Auto Reflow Rulesys_ux_auto_reflow_rule
Banner Announcementsys_ux_banner_announcement
Banner Announcement Configsys_ux_banner_announcement_config
UX Children Definitionsys_ux_children
UX Children Layoutsys_ux_children_layout
Children Slotsys_ux_children_slot
UX Client Script βœ…sys_ux_client_script
UX Client Script Include βœ…sys_ux_client_script_include
UX Component Presetsys_ux_component_preset
EVAM Definitionsys_ux_composite_data
EVAM Datasourcesys_ux_composite_datasource
EVAM Data Source Filtersys_ux_composite_datasource_filter
EVAM Data Filtersys_ux_composite_data_filter
EVAM Datasource M2Msys_ux_composite_data_m2m_datasource
EVAM View Config Bundle M2Msys_ux_composite_data_m2m_predicate_bundle
View Templatesys_ux_composite_data_template
EVAM View Configsys_ux_composite_data_template_predicate
EVAM View Config Bundlesys_ux_composite_data_template_predicate_bundle
UX Content Pickersys_ux_content_picker
UX Content Placeholdersys_ux_content_placeholder_elem
UX Controllersys_ux_controller
UX Controller Presetsys_ux_controller_preset
User Criteria Exclusionssys_ux_criteria_m2m_exclusion
User Criteria Inclusionsys_ux_criteria_m2m_inclusion
UX Custom Content Extensionsys_ux_custom_content_root_elem
Data Broker βœ…sys_ux_data_broker
Composite Data Broker βœ…sys_ux_data_broker_composite
GraphQL Data Broker βœ…sys_ux_data_broker_graphql
Proxied Data Broker βœ…sys_ux_data_broker_proxy
REST Data Broker βœ…sys_ux_data_broker_rest
External REST Data Broker βœ…sys_ux_data_broker_rest_external
Data Broker Scriptlet βœ…sys_ux_data_broker_scriptlet
Simple Data Broker βœ…sys_ux_data_broker_simple
Data Broker Server Script βœ…sys_ux_data_broker_transform
UX Diagnostic Rulessys_ux_diagnostic_rule
Route Configurationsys_ux_dynamic_route_config
Route Mappingsys_ux_dynamic_route_mapping
UX Event βœ…sys_ux_event
Experience Categorysys_ux_experience_category
UX Extension Pointsys_ux_extension_point
UX Form Actionssys_ux_form_action
UX Form Actions Layoutsys_ux_form_action_layout
UX Form Actions Layout Groupsys_ux_form_action_layout_group
UX Form Actions Layout Itemsys_ux_form_action_layout_item
UX Header Configurationsys_ux_header_config
UX Highlighted Value Configurationsys_ux_highlighted_value_config
UX Interfacesys_ux_interface
UX Keyboard Shortcutsys_ux_keyboard_shortcut
UX Keyboard Shortcut Definitionsys_ux_keyboard_shortcut_definition
UX Keyboard Shortcut Deny Listsys_ux_keyboard_shortcut_deny_list
UX Assetsys_ux_lib_asset
UX Component Definition βœ…sys_ux_lib_component
Component Actionsys_ux_lib_component_action
Component Attributesys_ux_lib_component_attr
UX Component Assetssys_ux_lib_component_m2m_asset
Component Propertysys_ux_lib_component_prop
UX Content Picker Slotsys_ux_lib_content_picker_slot
Picker Slot Variablesys_ux_lib_picker_slot_var
UX Component Prefetched Resourcesys_ux_lib_presource
UX Source Codesys_ux_lib_source_script
UX Listsys_ux_list
UX List Categorysys_ux_list_category
UX List Menu Configurationsys_ux_list_menu_config
M2m Action Assig Ux Action Configsys_ux_m2m_action_assignment_action_config
Sys Ux M2m Action Layout Itemsys_ux_m2m_action_layout_item
Banner Announcement Mappingsys_ux_m2m_banner_announcement
Sys Ux M2m Highlighted Value Configsys_ux_m2m_highlighted_value_config
M2m Workspace Header Ux Header Configsys_ux_m2m_workspace_header_ux_header_config
Sys Ux M2m Workspace View Rule Ux View Rule Configsys_ux_m2m_workspace_view_rule_ux_view_rule_config
UX Macroponent Definition βœ…sys_ux_macroponent
UX Macroponent Rulessys_ux_macroponent_rule
UX Macroponent Typesys_ux_macroponent_type
UX Managed Service Workersys_ux_managed_service_worker
UX Metrics Applicationssys_ux_metrics_app
My UX Listsys_ux_my_list
UX App Shell UIsys_ux_page
UX Page Action Registrysys_ux_page_action
Action Bindingsys_ux_page_action_binding
UX Page Elementsys_ux_page_element
UX Page Element Permissionssys_ux_page_element_m2m_role
UX Page Property βœ…sys_ux_page_property
UX Application βœ…sys_ux_page_registry
EVAM View Config Action Assignment M2Msys_ux_predicate_m2m_action_assignment
Composite Datasetsys_ux_query_variable
UX Application Category M2Msys_ux_registry_m2m_category
UX Ribbon Configurationsys_ux_ribbon_config
Ribbon Configuration Settingsys_ux_ribbon_config_setting
UX Dashboard Route Permissionsys_ux_route_permission
UX Screen βœ…sys_ux_screen
UX Screen Conditionsys_ux_screen_condition
UX Screen Collectionsys_ux_screen_type
UX Sitemap Configurationsys_ux_seo_sitemap_config
UX Sitemap Definitionsys_ux_sitemap_definition
UX Stylesys_ux_style
UX Template Typesys_ux_template_type
UX Themesys_ux_theme
UX Theme Assetsys_ux_theme_asset
Ux Theme Customizationsys_ux_theme_customization
UX Theme Assetssys_ux_theme_m2m_asset
UX Theme Propertysys_ux_theme_property
UX Theme Property Schemasys_ux_theme_property_schema
UX Typesys_ux_type
UX Unified Cache Versionsys_ux_unified_cache_version
UX View Rules Configurationsys_ux_view_rules_configuration
UIB Screen Test Valuessys_uib_screen_test_values
3
Subscribe to my newsletter

Read articles from Reece Poulsen directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Reece Poulsen
Reece Poulsen

Back in my freshman year of college, I was introduced to the world of programming, and it immediately caught my attention. The idea of creating something new with just a little learning and a couple of lines of code fascinated meβ€”it was like discovering a whole new universe of possibilities! Ever since that moment, I've been on a continuous journey to expand my programming knowledge and skills. Now I'm a relatively new software developer on the ServiceNow platform, and I'm eager to explore its potential. Through this blog, I hope to share some of the things I'm learning along the way. Let's dive into the world of ServiceNow together and uncover the tricks and insights that can make a difference for us as developers!