forcedotcom/sf-skills10 files

Building Omnistudio Omniscript

OmniStudio OmniScript creation and validation with 120-point scoring. Use when building guided digital experiences, multi-step forms, or interactive processes that orchestrate Integration Procedures and Data Mappers. TRIGGER when: user creates OmniScripts, designs step flows, configures element types, or reviews existing OmniScript configurations. DO NOT TRIGGER when: building FlexCards (use building-omnistudio-flexcard), creating Integration Procedures directly (use building-omnistudio-integration-procedure), or analyzing dependencies (use analyzing-omnistudio-dependencies).

Specification
Skill ID
forcedotcom/sf-skills/building-omnistudio-omniscript
Publisher
forcedotcom
Repository
sf-skills
Installs
0
Files
10
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

forcedotcom/sf-skills/building-omnistudio-omniscriptInstalls these files
  • assets/omni-process-element-step.json
  • assets/omni-process-element-text-block.json
  • assets/omni-process-omniscript.json
  • CREDITS.md
  • references/best-practices.md
  • references/element-types.md
  • scripts/check-duplicate-omniscript.sh
  • scripts/cli-reference.sh
  • scripts/deploy-omniscript.sh
  • SKILL.md

What this skill tells the agent

building-omnistudio-omniscript: OmniStudio OmniScript Creation and Validation

Expert OmniStudio OmniScript builder for declarative, step-based guided digital experiences. OmniScripts are the OmniStudio analog of Screen Flows: multi-step, interactive processes that collect input, orchestrate server-side logic (Integration Procedures, DataRaptors), and present results to the user — all without code.

Quick Reference

Scoring: 120 points across 6 categories. Thresholds: ✅ 90+ (Deploy) | ⚠️ 67-89 (Review) | ❌ <67 (Block - fix required)


Scope

  • In scope: Creating OmniScripts from requirements, element selection and PropertySetConfig design, dependency analysis (Integration Procedures, DataRaptors), data flow tracing, 120-point validation scoring, deployment and activation
  • Out of scope: Building FlexCards (use building-omnistudio-flexcard), creating Integration Procedures directly (use building-omnistudio-integration-procedure), mapping full dependency trees (use analyzing-omnistudio-dependencies), deploying metadata to org (use deploying-metadata)

Required Inputs

Gather these before building:

InputDescriptionDefault
TypeProcess category (e.g., ServiceRequest, Enrollment)None — required
SubTypeSpecific variation (e.g., NewCase, UpdateAddress)None — required
LanguageLocale for the OmniScriptEnglish
PurposeBusiness process this OmniScript guidesNone — required
Target orgOrg alias for deploymentCurrent default org
Data sourcesObjects/APIs to query or updateIdentify from requirements

Core Responsibilities

  1. OmniScript Generation: Create well-structured OmniScripts from requirements, selecting appropriate element types for each step
  2. Element Design: Configure PropertySetConfig JSON for each element with correct data binding, validation, and conditional logic
  3. Dependency Analysis: Map all references to Integration Procedures, DataRaptors, and embedded OmniScripts before deployment
  4. Data Flow Analysis: Trace data through the OmniScript JSON structure — from prefill through user input to final save actions

CRITICAL: Orchestration Order

analyzing-omnistudio-dependencies → building-omnistudio-datamapper → building-omnistudio-integration-procedure → building-omnistudio-omniscript → building-omnistudio-flexcard (you are here: building-omnistudio-omniscript)

OmniScripts consume Integration Procedures and DataRaptors. Build those FIRST. FlexCards may launch OmniScripts — build FlexCards AFTER. Use analyzing-omnistudio-dependencies to map the full dependency tree before starting.


Key Insights

InsightDetails
Type/SubType/Language tripletUniquely identifies an OmniScript. All three values are required and form the composite key. Example: Type=ServiceRequest, SubType=NewCase, Language=English
PropertySetConfigJSON blob containing all element configuration — layout, data binding, validation rules, conditional visibility. This is where the real logic lives
Core namespaceOmniProcess with IsIntegrationProcedure = false (equivalently OmniProcessType='OmniScript'). Elements are child OmniProcessElement records
Element hierarchyElements use Level/Order fields for tree structure. Level 0 = Steps, Level 1+ = elements within steps. Order determines sequence within a level
Version managementMultiple versions can exist; only one can be active per Type/SubType/Language triplet. Activate via the IsActive field
Data JSONOmniScripts pass a single JSON data structure through all steps. Elements read from and write to this shared JSON via merge field syntax

Workflow Design (5-Phase Pattern)

Phase 1: Requirements Gathering

Before building, evaluate alternatives: OmniScripts are best for complex, multi-step guided processes. For simple single-screen data entry, consider Screen Flows. For data display without interaction, consider FlexCards.

Ask the user to gather:

  • Type: The process category (e.g., ServiceRequest, Enrollment, ClaimSubmission)
  • SubType: The specific variation (e.g., NewCase, UpdateAddress, FileAppeal)
  • Language: Typically English unless multi-language support is required
  • Purpose: What business process this OmniScript guides the user through
  • Target org: Org alias for deployment
  • Data sources: Which objects/APIs need to be queried or updated

Then: Check existing OmniScripts to avoid duplication, identify reusable Integration Procedures or DataRaptors, and map the dependency chain.

Phase 2: Design & Element Selection

Design each step and select element types appropriate to the interaction pattern.

Container Elements
Element TypePurposeKey Config
StepTop-level container for a group of UI elements; each Step is a page in the wizardchartLabel, knowledgeOptions, show (conditional visibility)
Conditional BlockShow/hide a group of elements based on conditionsconditionType, show expression
Loop BlockIterate over a data list and render elements for each itemloopData (JSON path to array)
Edit BlockInline editing container for tabular dataeditFields, dataSource
Input Elements
Element TypePurposeKey Config
TextSingle-line text inputlabel, placeholder, pattern (regex validation)
Text AreaMulti-line text inputlabel, maxLength, rows
NumberNumeric input with optional formattinglabel, min, max, step, format
DateDate pickerlabel, dateFormat, minDate, maxDate
Date/TimeDate and time pickerlabel, dateFormat, timeFormat
CheckboxBoolean togglelabel, defaultValue
RadioRadio button group for single selectionlabel, options (static or data-driven)
SelectDropdown selectionlabel, options, optionSource (static/data)
Multi-selectMultiple item selectionlabel, options, maxSelections
Type AheadSearch/autocomplete inputlabel, dataSource, searchField, minCharacters
SignatureSignature capture padlabel, penColor, backgroundColor
FileFile uploadlabel, maxFileSize, allowedExtensions
CurrencyCurrency input with locale formattinglabel, currencyCode, min, max
EmailEmail input with format validationlabel, placeholder
TelephonePhone number input with maskinglabel, mask, placeholder
URLURL input with format validationlabel, placeholder
PasswordMasked text inputlabel, minLength
RangeSlider inputlabel, min, max, step
TimeTime pickerlabel, timeFormat
Display Elements
Element TypePurposeKey Config
Text BlockStatic content display (HTML supported)textContent, HTMLTemplateId
HeadlineSection headingtext, level (h1-h6)
AggregateCalculated summary displayaggregateExpression, format
DisclosureExpandable/collapsible contentlabel, defaultExpanded
ImageImage displayimageURL, altText
ChartData visualizationchartType, dataSource
Action Elements
Element TypePurposeKey Config
DataRaptor Extract ActionPull data from Salesforcebundle, inputMap, outputMap
DataRaptor Load ActionPush data to Salesforcebundle, inputMap

More from forcedotcom

Use this skill in a project

Open any RiverX project, search the Skills panel for forcedotcom/sf-skills/building-omnistudio-omniscript, and install it in one click.

Use this skill