sf-industry-commoncore-omnistudio-analyze

安装量: 465
排名: #4766

安装

npx skills add https://github.com/jaganpro/sf-skills --skill sf-industry-commoncore-omnistudio-analyze
sf-industry-commoncore-omnistudio-analyze: OmniStudio Cross-Component Analysis
Expert OmniStudio analyst specializing in namespace detection, dependency mapping, and impact analysis across the full OmniStudio component suite. Perform org-wide inventory of OmniScripts, FlexCards, Integration Procedures, and Data Mappers with automated dependency graph construction and Mermaid visualization.
Core Responsibilities
Namespace Detection
Identify whether an org uses Core (Industries), vlocity_cmt (Communications, Media & Energy), or vlocity_ins (Insurance & Health) namespace
Dependency Analysis
Build directed graphs of cross-component dependencies using BFS traversal with circular reference detection
Impact Analysis
Determine which components are affected when a given OmniScript, IP, FlexCard, or Data Mapper changes
Mermaid Visualization
Generate dependency diagrams in Mermaid syntax for documentation and review
Org-Wide Inventory
Catalog all OmniStudio components by type, status, language, and version
CRITICAL: Orchestration Order
When multiple OmniStudio skills are involved, follow this dependency chain:
sf-industry-commoncore-omnistudio-analyze
sf-industry-commoncore-datamapper
sf-industry-commoncore-integration-procedure
sf-industry-commoncore-omniscript
sf-industry-commoncore-flexcard
This skill runs first to establish namespace context and dependency maps that downstream skills consume.
Key Insights
Insight
Detail
Three namespaces coexist
Core (OmniProcess), vlocity_cmt (vlocity_cmt__OmniScript__c), vlocity_ins (vlocity_ins__OmniScript__c)
Dependencies are stored in JSON
PropertySetConfig (elements), Definition (FlexCards), InputObjectName/OutputObjectName (Data Mappers)
Circular references are possible
OmniScript A → IP B → OmniScript A via embedded call
FlexCard data sources are typed
dataSource.type === 'IntegrationProcedures'
(plural) in DataSourceConfig JSON
Active vs Draft matters
Only active components participate in runtime dependency chains
Workflow (4-Phase Pattern)
Phase 1: Namespace Detection
Purpose
Determine which OmniStudio namespace the org uses before querying any component metadata. Detection Algorithm — Probe objects in order until a successful COUNT() returns: Core (Industries namespace) : SELECT COUNT() FROM OmniProcess If this succeeds, the org uses the Core namespace (API 234.0+ / Spring '22+). vlocity_cmt (Communications, Media & Energy) : SELECT COUNT() FROM vlocity_cmt__OmniScript__c vlocity_ins (Insurance & Health) : SELECT COUNT() FROM vlocity_ins__OmniScript__c If none succeed, OmniStudio is not installed in the org. CLI Commands for namespace detection :

Core namespace probe

sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2

/dev/null

vlocity_cmt namespace probe

sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2

/dev/null

vlocity_ins namespace probe

sf data query
--query
"SELECT COUNT() FROM vlocity_ins__OmniScript__c"
--target-org myorg
--json
2
>
/dev/null
Evaluate results
A successful query (exit code 0 with
totalSize
in JSON) confirms the namespace. A query failure (
INVALID_TYPE
or
sObject type not found
) means that namespace is not present.
See
:
references/namespace-guide.md
for complete object/field mapping across all three namespaces.
Phase 2: Component Discovery
Purpose
Build an inventory of all OmniStudio components in the org.
Using the detected namespace, query each component type:
OmniScripts
(Core example):
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = false
ORDER BY Type, SubType, Language, VersionNumber DESC
Integration Procedures
(Core example):
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = true
ORDER BY Type, SubType, Language, VersionNumber DESC
FlexCards
(Core example):
SELECT Id, Name, IsActive, DataSourceConfig, PropertySetConfig,
AuthorName, LastModifiedDate
FROM OmniUiCard
ORDER BY Name
IMPORTANT
The
OmniUiCard
object does NOT have a
Definition
field. Use
DataSourceConfig
for data source bindings and
PropertySetConfig
for card layout/states configuration.
Data Mappers
(Core example):
SELECT Id, Name, IsActive, Type, LastModifiedDate
FROM OmniDataTransform
ORDER BY Name
Data Mapper Items
(for object dependency extraction):
SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName,
InputObjectQuerySequence
FROM OmniDataTransformItem
WHERE OmniDataTransformationId IN ({datamapper_ids})
IMPORTANT
The foreign key field is
OmniDataTransformationId
(full word "Transformation"), NOT
OmniDataTransformId
.
CLI Command pattern
:
sf data query
--query
"SELECT Id, Type, SubType, Language, IsActive FROM OmniProcess WHERE IsIntegrationProcedure = false"
\
--target-org myorg
--json
Phase 3: Dependency Analysis
Purpose
Parse component metadata to build a directed dependency graph.
Algorithm: BFS with Circular Detection
1. Initialize empty graph G and visited set V
2. For each root component C:
a. Enqueue C into work queue Q
b. While Q is not empty:
i. Dequeue component X from Q
ii. If X is in V, record circular reference and skip
iii. Add X to V
iv. Parse X's metadata for dependency references
v. For each dependency D found:
- Add edge X → D to graph G
- If D is not in V, enqueue D into Q
3. Return graph G and any circular references detected
Element Type → Dependency Extraction
OmniScript and IP elements store references in the
PropertySetConfig
JSON field. Parse each element to extract dependencies:
Element Type
JSON Path in PropertySetConfig
Dependency Target
DataRaptor Transform Action
bundle
,
bundleName
Data Mapper (by name)
DataRaptor Turbo Action
bundle
,
bundleName
Data Mapper (by name)
Remote Action
remoteClass
,
remoteMethod
Apex Class.Method
Integration Procedure Action
integrationProcedureKey
IP (Type_SubType)
OmniScript Action
omniScriptKey
or
Type/SubType
OmniScript (Type_SubType)
HTTP Action
httpUrl
,
httpMethod
External endpoint (URL)
DocuSign Envelope Action
docuSignTemplateId
DocuSign template
Apex Remote Action
remoteClass
Apex Class
Parsing PropertySetConfig
:
For each OmniProcessElement:
1. Read PropertySetConfig (JSON string)
2. Parse JSON
3. Check element.Type against extraction table
4. Extract referenced component name/key
5. Resolve reference to an OmniProcess/OmniDataTransform record
6. Add edge: parent component → referenced component
FlexCard Data Source Parsing
FlexCards store their data source configuration in the
DataSourceConfig
JSON field (NOT
Definition
— that field does not exist on
OmniUiCard
):
Parse DataSourceConfig JSON:
1. Access dataSource object (singular, not array)
2. For each dataSource where type === 'IntegrationProcedures' (note: PLURAL):
- Extract dataSource.value.ipMethod (IP Type_SubType)
- Add edge: FlexCard → Integration Procedure
3. For each dataSource where type === 'ApexRemote':
- Extract dataSource.value.className
- Add edge: FlexCard → Apex Class
4. For childCard references, parse PropertySetConfig:
- Add edge: FlexCard → child FlexCard
IMPORTANT
The data source type for IPs is
IntegrationProcedures
(plural with capital P), not
IntegrationProcedure
.
Data Mapper Object Dependencies
Data Mappers reference Salesforce objects via their items:
For each OmniDataTransformItem:
1. Read InputObjectName → source sObject
2. Read OutputObjectName → target sObject
3. Add edge: Data Mapper → sObject (read from InputObjectName)
4. Add edge: Data Mapper → sObject (write to OutputObjectName)
See
:
references/dependency-patterns.md
for complete dependency extraction rules and examples.
Phase 4: Visualization & Reporting
Purpose
Generate human-readable output from the dependency graph. Output Format 1: Mermaid Dependency Diagram graph LR subgraph OmniScripts OS1 ["createOrder
English v3"] OS2 ["updateAccount
English v1"] end subgraph Integration Procedures IP1 ["fetchAccountData
English v2"] IP2 ["submitOrder
English v1"] end subgraph Data Mappers DM1 ["AccountExtract"] DM2 ["OrderTransform"] end subgraph FlexCards FC1 ["AccountSummaryCard"] end OS1 --> |IP Action| IP2 OS1 --> |DR Action| DM2 OS2 --> |IP Action| IP1 IP1 --> |DR Action| DM1 FC1 --> |Data Source| IP1 style OS1 fill :

dbeafe

, stroke :

1d4ed8

, color :

1f2937

style OS2 fill :

dbeafe

, stroke :

1d4ed8

, color :

1f2937

style IP1 fill :

fef3c7

, stroke :

b45309

, color :

1f2937

style IP2 fill :

fef3c7

, stroke :

b45309

, color :

1f2937

style DM1 fill :

d1fae5

, stroke :

047857

, color :

1f2937

style DM2 fill :

d1fae5

, stroke :

047857

, color :

1f2937

style FC1 fill :

fce7f3

, stroke :

be185d

, color :

1f2937

Color scheme : Component Type Fill Stroke OmniScript

dbeafe

(blue-100)

1d4ed8

(blue-700) Integration Procedure

fef3c7

(amber-100)

b45309

(amber-700) Data Mapper

d1fae5

(green-100)

047857

(green-700) FlexCard

fce7f3

(pink-100)

be185d

(pink-700) Apex Class

e9d5ff

(purple-100)

7c3aed

(purple-700) External (HTTP)

f1f5f9

(slate-100)

475569

(slate-600) Output Format 2: JSON Summary { "namespace" : "Core" , "components" : { "omniScripts" : 12 , "integrationProcedures" : 8 , "flexCards" : 5 , "dataMappers" : 15 } , "dependencies" : [ { "from" : "OS:createOrder" , "to" : "IP:submitOrder" , "type" : "IPAction" } , { "from" : "IP:fetchAccountData" , "to" : "DM:AccountExtract" , "type" : "DataRaptorAction" } ] , "circularReferences" : [ ] , "impactAnalysis" : { "DM:AccountExtract" : { "directDependents" : [ "IP:fetchAccountData" ] , "transitiveDependents" : [ "OS:updateAccount" , "FC:AccountSummaryCard" ] } } } Output Format 3: Human-Readable Report OmniStudio Dependency Report ============================= Org Namespace: Core (Industries) Scan Date: 2026-03-06 Component Inventory: OmniScripts: 12 (8 active, 4 draft) Integration Procedures: 8 (6 active, 2 draft) FlexCards: 5 (5 active) Data Mappers: 15 (12 active, 3 draft) Dependency Summary: Total edges: 23 Circular references: 0 Orphaned components: 2 (no inbound/outbound deps) Impact Analysis (most-depended components): 1. DM:AccountExtract → 5 dependents 2. IP:fetchAccountData → 3 dependents 3. DM:OrderTransform → 2 dependents Namespace Object/Field Mapping Complete mapping of OmniStudio objects and fields across all three namespaces: Primary Objects Concept Core vlocity_cmt vlocity_ins OmniScript / IP container OmniProcess vlocity_cmt__OmniScript__c vlocity_ins__OmniScript__c OmniScript / IP elements OmniProcessElement vlocity_cmt__Element__c vlocity_ins__Element__c FlexCard OmniUiCard vlocity_cmt__VlocityUITemplate__c vlocity_ins__VlocityUITemplate__c Data Mapper OmniDataTransform vlocity_cmt__DRBundle__c vlocity_ins__DRBundle__c Data Mapper Item OmniDataTransformItem vlocity_cmt__DRMapItem__c vlocity_ins__DRMapItem__c Key Fields Concept Core Field vlocity_cmt Field vlocity_ins Field Script type Type vlocity_cmt__Type__c vlocity_ins__Type__c Script subtype SubType vlocity_cmt__SubType__c vlocity_ins__SubType__c Language Language vlocity_cmt__Language__c vlocity_ins__Language__c Is active IsActive vlocity_cmt__IsActive__c vlocity_ins__IsActive__c Version VersionNumber vlocity_cmt__Version__c vlocity_ins__Version__c Element config PropertySetConfig vlocity_cmt__PropertySet__c vlocity_ins__PropertySet__c Is Integration Procedure IsIntegrationProcedure vlocity_cmt__IsIntegrationProcedure__c vlocity_ins__IsIntegrationProcedure__c FlexCard data sources DataSourceConfig vlocity_cmt__Definition__c vlocity_ins__Definition__c FlexCard layout/states PropertySetConfig (same field) (same field) DM input object InputObjectName (on Item) vlocity_cmt__InterfaceObject__c vlocity_ins__InterfaceObject__c DM output object OutputObjectName (on Item) vlocity_cmt__TargetFieldObjectType__c vlocity_ins__TargetFieldObjectType__c See : references/namespace-guide.md for the complete reference including metadata type names for deployment. CLI Commands Reference Namespace Detection

Probe all three namespaces (run sequentially, first success wins)

sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2

/dev/null && echo "CORE" || \ sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2

/dev/null && echo "VLOCITY_CMT" || \ sf data query --query "SELECT COUNT() FROM vlocity_ins__OmniScript__c" --target-org myorg --json 2

/dev/null && echo "VLOCITY_INS" || \ echo "NOT_INSTALLED" Component Inventory (Core Namespace)

Count OmniScripts

sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = false" \ --target-org myorg --json

Count Integration Procedures

sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = true" \ --target-org myorg --json

Count FlexCards

sf data query --query "SELECT COUNT() FROM OmniUiCard" --target-org myorg --json

Count Data Mappers

sf data query --query "SELECT COUNT() FROM OmniDataTransform" --target-org myorg --json Dependency Data Extraction (Core Namespace)

Get OmniScript elements with their config

sf data query --query "SELECT Id, OmniProcessId, Name, Type, PropertySetConfig FROM OmniProcessElement WHERE OmniProcessId = '{process_id}'" \ --target-org myorg --json

Get FlexCard data sources (for dependency parsing)

sf data query --query "SELECT Id, Name, DataSourceConfig FROM OmniUiCard WHERE IsActive = true" \ --target-org myorg --json

Get Data Mapper items (for object dependencies)

sf data query
--query
"SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName FROM OmniDataTransformItem"
\
--target-org myorg
--json
Cross-Skill Integration
Skill
Relationship
How This Skill Helps
sf-industry-commoncore-datamapper
Provides namespace and object dependency data
Data Mapper authoring uses detected namespace for correct API names
sf-industry-commoncore-integration-procedure
Provides namespace and IP dependency map
IP authoring uses dependency graph to avoid circular references
sf-industry-commoncore-omniscript
Provides namespace and element dependency data
OmniScript authoring uses namespace-correct field names
sf-industry-commoncore-flexcard
Provides namespace and data source dependency map
FlexCard authoring uses detected IP references for validation
sf-diagram-mermaid
Consumes dependency graph for visualization
This skill generates Mermaid output compatible with sf-diagram-mermaid styling
sf-metadata
Provides sObject metadata for Data Mapper analysis
Object field validation during dependency extraction
sf-deploy
Deployment uses namespace-correct metadata types
This skill provides the correct metadata type names per namespace
Edge Cases
Scenario
Handling
Mixed namespace org (migration in progress)
Probe all three namespaces; report if multiple return results. Components may exist under both old and migrated namespaces.
Inactive components with dependencies
Include in dependency graph but mark as inactive. Warn if active component depends on inactive one.
Large orgs (1000+ components)
Use SOQL pagination (LIMIT/OFFSET or queryMore). Process in batches of 200.
PropertySetConfig exceeds SOQL field length
Use Tooling API or REST API to fetch full JSON body for elements with truncated config.
Circular dependency detected
Log the cycle path (A → B → C → A), mark all participating edges, continue traversal for remaining branches.
Components referencing deleted items
Record as "broken reference" in output. Flag for cleanup.
Version conflicts (multiple active versions)
Only the highest active version number participates in runtime. Warn if lower versions have unique dependencies.
Notes
Dependencies
Requires
sf
CLI with org authentication. Optional: sf-diagram-mermaid for styled visualization.
Namespace must be detected first
All downstream queries depend on knowing the correct object and field API names.
PropertySetConfig is the key
Nearly all dependency information lives in this JSON field on OmniProcessElement records.
DataSourceConfig for FlexCards
Data sources are in
DataSourceConfig
, NOT a
Definition
field (which does not exist on
OmniUiCard
). Card layout/states are in
PropertySetConfig
.
Data Mapper items contain object references
InputObjectName and OutputObjectName on OmniDataTransformItem records reveal which sObjects a Data Mapper reads from and writes to. The foreign key to the parent is
OmniDataTransformationId
(full "Transformation").
IsIntegrationProcedure is the discriminator
:
OmniProcess
uses a boolean
IsIntegrationProcedure
field, not a
TypeCategory
field (which does not exist). The
OmniProcessType
picklist is computed from this boolean and is useful for filtering reads but cannot be set directly on create.
sf data create record limitations
The --values flag cannot handle JSON strings in textarea fields (e.g., PropertySetConfig). Use sf api request rest --method POST --body @file.json instead for records with JSON configuration. Install
返回排行榜