omnistudio-datamapper-generate
OmniStudio Data Mapper (formerly DataRaptor) creation and validation with 100-point scoring. Use when building Extract, Transform, Load, or Turbo Extract Data Mappers, mapping Salesforce object fields, or reviewing existing Data Mapper configurations. TRIGGER when: user creates Data Mappers, configu
By forcedotcom · 4,646 installs
npx skills add forcedotcom/sf-skills --skill omnistudio-datamapper-generate
Source repository · Upstream listing
omnistudio datamapper generate: OmniStudio Data Mapper Creation and Validation
Expert OmniStudio Data Mapper developer specializing in Extract, Transform, Load, and Turbo Extract configurations. Generate production ready, performant, and maintainable Data Mapper definitions with proper field mappings, query optimization, and data integrity safeguards.
Scope
In scope : Creating and validating OmniStudio Data Mapper configurations (Extract, Transform, Load, Turbo Extract); field mapping design; query optimization; FLS (Field Level Security) validation; deployment via platform metadata deploy skill
Out of scope : Building Integration Procedures (use omnistudio integration procedure generate ), authoring OmniScripts (use omnistudio omniscript generate ), designing FlexCards (use omnistudio flexcard generate ), analyzing cross component dependencies (use omnistudio dependencies analyze )
Core Responsibilities
1. Generation : Create Data Mapper configurations (Extract, Transform, Load, Turbo Extract) from requirements
2. Field Mapping : Design object to output field mappings with proper type handling, lookup resolution, and null safety
3. Dependency Tracking : Identify related OmniStudio components (Integration Procedures, OmniScripts, FlexCards) that consume or feed Data Mappers
4. Validation & Scoring : Score Data Mapper configurations against 5 categories (0 100 points)
CRITICAL: Orchestration Order
omnistudio dependencies analyze omnistudio datamapper generate omnistudio integration procedure generate omnistudio omniscript generate omnistudio flexcard generate (you are here: omnistudio datamapper generate)
Data Mappers are the data access layer of the OmniStudio stack. They must be created and deployed before Integration Procedures or OmniScripts that reference them. Use omnistudio dependencies analyze FIRST to understand existing component dependencies.
Key Insights
Insight Details
Extract vs Turbo Extract Extract uses standard SOQL with relationship queries. Turbo Extract uses server side compiled queries for read heavy, high volume scenarios (10x+ faster). Turbo Extract does not support formula fields, related lists, or write operations.
Transform is in memory Transform Data Mappers operate entirely in memory with no DML or SOQL. They reshape data structures between steps in an Integration Procedure. Use for JSON to JSON transformations, field renaming, and data flattening.
Load = DML Load Data Mappers perform insert, update, upsert, or delete operations. They require proper FLS checks and error handling. Always validate field level security before deploying Load Data Mappers to production.
OmniDataTransform metadata Data Mappers are stored as OmniDataTransform and OmniDataTransformItem records. Retrieve and deploy using these metadata type names, not the legacy DataRaptor API names.
Workflow (5 Phase Pattern)
Phase 1: Requirements Gathering
Ask the user to gather:
Data Mapper type (Extract, Transform, Load, Turbo Extract)
Target Salesforce object(s) and fields
Target org alias
Consuming component (Integration Procedure, OmniScript, or FlexCard name)
Data volume expectations (record counts, frequency)
Then :
1. Check existing Data Mappers: Glob: /OmniDataTransform
2. Check existing OmniStudio metadata: Glob: /omnistudio/
3. Create a task list
Phase 2: Design & Type Selection
Type Use Case Naming Prefix Supports DML Supports SOQL
Extract Read data from one or more objects with relationship queries DR Extract No Yes
Turbo Extract High volume read only queries, server side compiled DR TurboExtract No Yes (compiled)
Transform In memory data reshaping between procedure steps DR Transform No No
Load Write data (insert, update, upsert, delete) DR Load Yes No
Naming Format : [Prefix][Object] [Purpose] using PascalCase
Examples :
DR Extract Account Details Extract Account with related Contacts
DR TurboExtract Case List High volume Case list for FlexCard
DR Transform Lead Flatten Flatten nested Lead data structure
DR Load Opportunity Create Insert Opportunity records
Phase 3: Generation & Validation
For Generation :
1. Read assets/omni data transform extract.json (Extract), assets/omni data transform transform.json (Transform), or assets/omni data transform load.json (Load) for the OmniDataTransform record template
2. Read assets/omni data transform item.json for each field mapping (OmniDataTransformItem) template
3. Configure query filters, sort order, and limits for Extract types
4. Set up lookup mappings and default values for Load types
5. Validate field level security for all mapped fields
For Review :
1. Read existing Data Mapper configuration
2. Run validation against best practices
3. Generate improvement report with specific fixes
Run Validation : Read assets/completion summary template.md for the scoring output format and thresholds.
Generation Guardrails (MANDATORY)
BEFORE generating ANY Data Mapper configuration, Claude MUST verify no anti patterns are introduced.
If ANY of these patterns would be generated, STOP and ask the user :
"I noticed [pattern]. This will cause [problem]. Should I:
A) Refactor to use [correct pattern]
B) Proceed anyway (not recommended)"
Anti Pattern Detection Impact
Extracting all fields No field list specified, wildcard selection Performance degradation, excessive data transfer
Missing lookup mappings Load references lookup field without resolution DML failure, null foreign key
Writing without FLS check Load Data Mapper with no security validation Security violation, data corruption in restricted profiles
Unbounded Extract query No LIMIT or filter on Extract Governor limit failure, timeout on large objects
Transform with side effects Transform attempting DML or callout Runtime error, Transform is in memory only
Hardcoded record IDs 15/18 char ID literal in filter or mapping Deployment failure across environments
Nested relationship depth 3 Extract with deeply nested parent traversal Query performance degradation, SOQL complexity limits
Load without error handling No upsert key or duplicate rule consideration Silent data corruption, duplicate records
DO NOT generate anti patterns even if explicitly requested. Ask user to confirm the exception with documented justification.
See : [references/best practices.md](references/best practices.md) for detailed patterns
See : [references/naming conventions.md](references/naming conventions.md) for naming rules
Phase 4: Deployment
Step 1: Validation
Use the platform metadata deploy skill: "Deploy OmniDataTransform [Name] to [target org] with dry run"
Step 2: Deploy (only if validation succeeds)
Use the platform metadata deploy skill: "Proceed with actual deployment to [target org]"
Post Deploy : Activate the Data Mapper in the target org. Verify it appears in OmniStudio Designer.
If deploy fails : Check error for specific cause — common issues: Entity cannot be found (Data Mapper is in Draft status; activate first), namespace prefix mismatch (check sfdx project.json ), or missing parent OmniDataTransform record for item deployments.
If Load DM fails at runtime : Check debug logs via sf apex log list o <org ; verify FLS and object permissions for the running user profile; confirm the upsert key field is populated and unique; Salesforce Load DMs follow allOrNone=false by default — partial successes are possible, check for isSuccess=false rows in the response.
Phase 5: Testing & Documentation
Completion Summary : Read assets/completion summary template.md for the completion summary format.
Testing Checklist :
[ ] Preview data output in OmniStudio Designer
[ ] Verify field mappings produce expected JSON structure
[ ] Test with representative data volume (not just 1 record)
[ ] Validate FLS enforcement with restricted profile user
[ ] Confirm consuming Integration Procedure/OmniScript receives correct data shape
Best Practices (100 Point Scoring)
Category Points Key Rules
Design & Naming 20 Correct type selection; naming follows DR [Type] [Object] [Purpose] convention; single responsibility per Data Mapper
Field Mapping 25 Explicit field list (no wildcards); correct input/output paths; proper type conversions; null safe default values
Data Integrity 25 FLS validation on all fields; lookup resolution for Load types; upsert keys defined; duplicate handling configured
Performance 15 Bounded queries with LIMIT/filters; Turbo Extract for read heavy scenarios; minimal relationship depth; indexed filter fields
Documentation 15 Description on OmniDataTransform record; field mapping rationale documented; consuming components identified
Thresholds : [PASS] 90+ (Deploy) [REVIEW] 67 89 (Review) [BLOCK] <67 (Block fix required)
CLI Commands
Query Existing Data Mappers
Query Data Mapper Field Mappings
Retrieve Data Mapper Metadata
Deploy Data Mapper Metadata
Output Expectations
Deliverables produced by this skill:
OmniDataTransform record — main Data Mapper record built from assets/omni data transform .json template
OmniDataTransformItem records — one per mapped field, built from assets/omni data transform item.json template
Validation score report — 100 point score across 5 categories (format in assets/completion summary template.md )
Deployment confirmation — Data Mapper activated and visible in OmniStudio Designer
Cross Skill Integration
From Skill To omnistudio datamapper generate When
omnistudio dependencies analyze omnistudio datamapper generate "Analyze dependencies before creating Data Mapper"
platform custom object generate / platform custom field generate omnistudio datamapper generate "Describe target object fields before mapping"
platform soql query omnistudio datamapper generate "Validate Extract query logic"
From omnistudio datamapper generate To Skill When
omnistudio datamapper generate omnistudio integration procedure generate "Create Integration Procedure that calls this Data Mapper"
omnistudio datamapper generate platform metadata deploy "Deploy Data Mapper to target org"
omnistudio datamapper generate omnistudio omniscript generate "Wire Data Mapper output into OmniScript"
omnistudio datamapper generate omnistudio flexcard generate "Display Data Mapper Extract results in FlexCard"
Gotchas
Issue Resolution
Large data volume ( 10K records) Use Turbo Extract; add pagination via Integration Procedure; warn about heap limits
Polymorphic lookup fields Specify the concrete object type in the mapping; test each type separately
Formula fields in Extract Standard Extract supports formula fields; Turbo Extract does not — fall back to standard Extract
Cross object Load (master detail) Insert parent records first, then child records in a separate Load step; use Integration Procedure to orchestrate sequence
Namespace prefixed fields Include namespace prefix in field paths (e.g., ns Field c ); verify prefix matches target org
Multi currency orgs Map CurrencyIsoCode explicitly; do not rely on default currency assumption
RecordType dependent mappings Filter by RecordType in Extract; set RecordTypeId in Load; document which RecordTypes are supported
Draft Data Mapper not retrievable sf project retrieve start m OmniDataTransform:<Name only works for active DMs; activate before retrieving
Foreign key field name wrong The parent lookup on OmniDataTransformItem is OmniDataTransformationId (full word "Transform