forcedotcom/sf-skills8 files

Omnistudio Integration Procedure Generate

OmniStudio Integration Procedure creation and validation with 110-point scoring. Use this skill when building server-side process orchestrations that combine Data Mapper actions, Apex Remote Actions, HTTP callouts, and conditional logic. TRIGGER when: user creates Integration Procedures, adds Data Mapper steps, configures Remote Actions, or reviews existing IP configurations. DO NOT TRIGGER when: building OmniScripts (use omnistudio-omniscript-generate), creating Data Mappers directly (use omnistudio-datamapper-generate), or analyzing cross-component dependencies (use omnistudio-dependencies-analyze).

Specification
Skill ID
forcedotcom/sf-skills/omnistudio-integration-procedure-generate
Publisher
forcedotcom
Repository
sf-skills
Installs
0
Files
8
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/omnistudio-integration-procedure-generateInstalls these files
  • SKILL.md
  • assets/omni-process-element-dr-extract.json
  • assets/omni-process-element-set-values.json
  • assets/omni-process-ip.json
  • assets/scoring-report-format.txt
  • references/best-practices.md
  • references/element-types.md
  • scripts/cli-commands.sh

What this skill tells the agent

omnistudio-integration-procedure-generate: OmniStudio Integration Procedure Creation and Validation

Expert OmniStudio Integration Procedure (IP) builder with deep knowledge of server-side process orchestration. Create production-ready IPs that combine DataRaptor/Data Mapper actions, Apex Remote Actions, HTTP callouts, conditional logic, and nested procedure calls into declarative multi-step operations.

Scope

  • In scope: Creating well-structured Integration Procedures from requirements; selecting and wiring element types (DataRaptor, Remote Action, HTTP, Conditional Block, Loop, Set Values, nested IP); dependency validation; error handling patterns; 110-point scoring; deployment and activation
  • Out of scope: Building OmniScripts (use omnistudio-omniscript-generate), creating Data Mappers directly (use omnistudio-datamapper-generate), designing FlexCards (use omnistudio-flexcard-generate), mapping full dependency trees (use omnistudio-dependencies-analyze), deploying metadata to org (use platform-metadata-deploy)

Required Inputs

  • Purpose: What business process is this IP orchestrating? (e.g., "onboard a new account", "process an order")
  • Target objects / data sources: Which Salesforce objects, external APIs, or both?
  • Type / SubType naming: PascalCase pair that uniquely identifies the IP (e.g., Type=OrderProcessing, SubType=Standard)
  • Target org alias: Authenticated org alias for deployment (e.g., myDevOrg)

Quick Reference

Scoring: 110 points across 6 categories. Thresholds: [PASS] 90+ (Deploy) | [REVIEW] 67-89 (Review) | [BLOCK] <67 (Block - fix required)


Core Responsibilities

  1. IP Generation: Create well-structured Integration Procedures from requirements, selecting correct element types and wiring inputs/outputs
  2. Element Composition: Assemble DataRaptor actions, Remote Actions, HTTP callouts, conditional blocks, loops, and nested IP calls into coherent orchestrations
  3. Dependency Analysis: Validate that referenced DataRaptors, Apex classes, and nested IPs exist and are active before deployment
  4. Error Handling: Enforce try/catch patterns, conditional rollback, and response validation across all data-modifying steps (DML — Data Manipulation Language)

CRITICAL: Orchestration Order

omnistudio-dependencies-analyze -> omnistudio-datamapper-generate -> omnistudio-integration-procedure-generate -> omnistudio-omniscript-generate -> omnistudio-flexcard-generate (you are here: omnistudio-integration-procedure-generate)

Data Mappers referenced by the IP must exist FIRST. Build and deploy DataRaptors/Data Mappers before the IP that calls them. The IP must be active before any OmniScript or FlexCard can invoke it.


Key Insights

InsightDetails
ChainingIPs call other IPs via Integration Procedure Action elements. Output of one step feeds input of the next via response mapping. Design data flow linearly where possible.
Response MappingEach element's output is namespaced under its element name in the response JSON. Use %elementName:keyPath% syntax to reference upstream outputs in downstream inputs.
CachingIPs support platform cache for read-heavy orchestrations. Set cacheType and cacheTTL in the procedure's PropertySet. Avoid caching procedures that perform DML.
VersioningType/SubType pairs uniquely identify an IP. Use SubType for versioning (e.g., Type=AccountOnboarding, SubType=v2). Only one version can be active at a time per Type/SubType.

Core Namespace Discriminator: OmniStudio Core stores both Integration Procedures and OmniScripts in the OmniProcess table. Use IsIntegrationProcedure = true or OmniProcessType = 'Integration Procedure' to filter IPs. Without a filter, queries return mixed results.

CRITICAL — Creating IPs via Data API: When creating OmniProcess records, set IsIntegrationProcedure = true to make the record an Integration Procedure. The OmniProcessType picklist is computed from this boolean and cannot be set directly. Also, Name is a required field on OmniProcess (not documented in standard OmniStudio docs). Use sf api request rest --method POST --body @file.json for creation — the sf data create record --values flag cannot handle JSON textarea fields like PropertySetConfig.

Workflow Design (5-Phase Pattern)

Phase 1: Requirements Gathering

Before building, evaluate alternatives: Sometimes a single DataRaptor, an Apex service, or a Flow is the better choice. IPs are optimal when you need declarative multi-step orchestration with branching, error handling, and mixed data sources.

Ask the user to gather:

  • Purpose and business process being orchestrated
  • Target objects and data sources (Salesforce objects, external APIs, or both)
  • Type/SubType naming (e.g., Type=OrderProcessing, SubType=Standard)
  • Target org alias for deployment

Then: Check existing IPs via CLI query (see CLI Commands below), identify reusable DataRaptors/Data Mappers, and review dependent components with omnistudio-dependencies-analyze.

Phase 2: Design & Element Selection

Element TypeUse CasePropertySet Key
DataRaptor Extract ActionRead Salesforce databundle
DataRaptor Load ActionWrite Salesforce databundle
DataRaptor Transform ActionData shaping/mappingbundle
Remote ActionCall Apex class methodremoteClass, remoteMethod
Integration Procedure ActionCall nested IPipMethod (format: Type_SubType)
HTTP ActionExternal API calloutpath, method
Conditional BlockBranching logic--
Loop BlockIterate over collections--
Set ValuesAssign variables/constants--

Naming Convention: [Type]_[SubType] using PascalCase. Element names within the IP should describe their action clearly (e.g., GetAccountDetails, ValidateInput, CreateOrderRecord).

Data Flow: Design the element chain so each step's output feeds naturally into the next step's input. Map outputs explicitly rather than relying on implicit namespace merging.

Phase 3: Generation & Validation

Build the IP definition with:

  • Correct Type/SubType assignment
  • Ordered element chain with explicit input/output mappings
  • Error handling on all data-modifying elements
  • Conditional blocks for branching logic

Validation (STRICT MODE):

  • BLOCK: Missing Type/SubType, circular IP calls, DML without error handling, references to nonexistent DataRaptors/Apex classes
  • WARN: Unbounded extracts without LIMIT, missing caching on read-only IPs, hardcoded IDs in PropertySetConfig, unused elements, missing element descriptions

Validation Report Format (6-Category Scoring 0-110): see assets/scoring-report-format.txt for the exact output layout.

Generation Guardrails (MANDATORY)

Anti-PatternImpactCorrect Pattern
Circular IP calls (A calls B calls A)Infinite loop / stack overflowMap dependency graph; no cycles allowed
DML without error handlingSilent data corruptionWrap DataRaptor Load in try/catch or conditional error check
Unbounded DataRaptor ExtractGovernor limits / timeoutSet LIMIT on extracts; paginate large datasets
Hardcoded Salesforce IDs in PropertySetConfigDeployment failure across orgsUse input variables, Custom Settings, or Custom Metadata
Sequential calls that could be parallelUnnecessary latencyGroup independent elements; no serial dependency needed
Missing response validationDownstream null reference errorsCheck element response before passing to next step

DO NOT generate anti-patterns even if explicitly requested.

Phase 4: Deployment

More from forcedotcom

Use this skill in a project

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

Use this skill