Sf Industry Commoncore Omnistudio Analyze

jaganpro/sf-skills/skills/sf-industry-commoncore-omnistudio-analyze

作者 jaganpro53c9956c4279MIT424 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫5 個月前更新

Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappers. TRIGGER when: user asks about OmniStudio dependencies, wants namespace detection (Core vs vlocity_cmt vs vlocity_ins), needs impact analysis, or requests dependency diagrams. DO NOT TRIGGER when: authoring OmniScripts (use sf-industry-commoncore-omniscript), building FlexCards (use sf-industry-commoncore-flexcard), creating Integration Procedures (use sf-industry-commoncore-integration-procedure), or configuring Data Mappers (use sf-industry-commoncore-datamapper).

AI 產生的概覽

分析 Salesforce OmniStudio 元件,進行命名空間偵測、相依性圖建構、影響分析與 Mermaid 圖產生。

功能
此技能引導代理對 Salesforce OmniStudio 組織執行四階段分析:偵測組織使用的是 Core、vlocity_cmt 還是 vlocity_ins 命名空間;盤點 OmniScript、Integration Procedure、FlexCard 與 Data Mapper;建構具循環參照偵測的有向相依性圖;並產生影響分析。輸出包括 Mermaid 相依性圖、JSON 摘要與可讀的相依性報告。此技能僅為說明文件,不附帶指令碼。
適用情境
適用於使用者詢問 OmniStudio 相依性、需要命名空間偵測、希望對元件變更進行影響分析,或需要相依性圖的場景。不適用於撰寫 OmniScript、FlexCard、Integration Procedure 或 Data Mapper。
執行需求
需要 Salesforce CLI(sf)以及已驗證的目標組織,並需要存取該組織的網路連線。選用:sf-diagram-mermaid 用於樣式化視覺化。不附帶指令碼,僅為說明文件。

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

  1. Namespace Detection: Identify whether an org uses Core (Industries), vlocity_cmt (Communications, Media & Energy), or vlocity_ins (Insurance & Health) namespace
  2. Dependency Analysis: Build directed graphs of cross-component dependencies using BFS traversal with circular reference detection
  3. Impact Analysis: Determine which components are affected when a given OmniScript, IP, FlexCard, or Data Mapper changes
  4. Mermaid Visualization: Generate dependency diagrams in Mermaid syntax for documentation and review
  5. 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

InsightDetail
Three namespaces coexistCore (OmniProcess), vlocity_cmt (vlocity_cmt__OmniScript__c), vlocity_ins (vlocity_ins__OmniScript__c)
Dependencies are stored in JSONPropertySetConfig (elements), Definition (FlexCards), InputObjectName/OutputObjectName (Data Mappers)
Circular references are possibleOmniScript A → IP B → OmniScript A via embedded call
FlexCard data sources are typeddataSource.type === 'IntegrationProcedures' (plural) in DataSourceConfig JSON
Active vs Draft mattersOnly 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:

  1. Core (Industries namespace):

    soql
    SELECT COUNT() FROM OmniProcess

    If this succeeds, the org uses the Core namespace (API 234.0+ / Spring '22+).

  2. vlocity_cmt (Communications, Media & Energy):

    soql
    SELECT COUNT() FROM vlocity_cmt__OmniScript__c
  3. vlocity_ins (Insurance & Health):

    soql
    SELECT COUNT() FROM vlocity_ins__OmniScript__c

If none succeed, OmniStudio is not installed in the org.

CLI Commands for namespace detection:

bash
# Core namespace probesf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2>/dev/null
# vlocity_cmt namespace probesf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2>/dev/null
# vlocity_ins namespace probesf 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 [blocked] 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):

soql
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,       PropertySetConfig, LastModifiedDateFROM OmniProcessWHERE IsIntegrationProcedure = falseORDER BY Type, SubType, Language, VersionNumber DESC

Integration Procedures (Core example):

soql
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,       PropertySetConfig, LastModifiedDateFROM OmniProcessWHERE IsIntegrationProcedure = trueORDER BY Type, SubType, Language, VersionNumber DESC

FlexCards (Core example):

soql
SELECT Id, Name, IsActive, DataSourceConfig, PropertySetConfig,       AuthorName, LastModifiedDateFROM OmniUiCardORDER 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):

soql
SELECT Id, Name, IsActive, Type, LastModifiedDateFROM OmniDataTransformORDER BY Name

Data Mapper Items (for object dependency extraction):

soql
SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName,       InputObjectQuerySequenceFROM OmniDataTransformItemWHERE OmniDataTransformationId IN ({datamapper_ids})

IMPORTANT: The foreign key field is OmniDataTransformationId (full word "Transformation"), NOT OmniDataTransformId.

CLI Command pattern:

bash
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 V2. 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 Q3. 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 TypeJSON Path in PropertySetConfigDependency Target
DataRaptor Transform Actionbundle, bundleNameData Mapper (by name)
DataRaptor Turbo Actionbundle, bundleNameData Mapper (by name)
Remote ActionremoteClass, remoteMethodApex Class.Method
Integration Procedure ActionintegrationProcedureKeyIP (Type_SubType)
OmniScript ActionomniScriptKey or Type/SubTypeOmniScript (Type_SubType)
HTTP ActionhttpUrl, httpMethodExternal endpoint (URL)
DocuSign Envelope ActiondocuSignTemplateIdDocuSign template
Apex Remote ActionremoteClassApex 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 [blocked] 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
mermaid
graph LR    subgraph OmniScripts        OS1["createOrder<br/>English v3"]        OS2["updateAccount<br/>English v1"]    end    subgraph Integration Procedures        IP1["fetchAccountData<br/>English v2"]        IP2["submitOrder<br/>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 TypeFillStroke
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
json
{  "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

ConceptCorevlocity_cmtvlocity_ins
OmniScript / IP containerOmniProcessvlocity_cmt__OmniScript__cvlocity_ins__OmniScript__c
OmniScript / IP elementsOmniProcessElementvlocity_cmt__Element__cvlocity_ins__Element__c
FlexCardOmniUiCardvlocity_cmt__VlocityUITemplate__cvlocity_ins__VlocityUITemplate__c
Data MapperOmniDataTransformvlocity_cmt__DRBundle__cvlocity_ins__DRBundle__c
Data Mapper ItemOmniDataTransformItemvlocity_cmt__DRMapItem__cvlocity_ins__DRMapItem__c

Key Fields

ConceptCore Fieldvlocity_cmt Fieldvlocity_ins Field
Script typeTypevlocity_cmt__Type__cvlocity_ins__Type__c
Script subtypeSubTypevlocity_cmt__SubType__cvlocity_ins__SubType__c
LanguageLanguagevlocity_cmt__Language__cvlocity_ins__Language__c
Is activeIsActivevlocity_cmt__IsActive__cvlocity_ins__IsActive__c
VersionVersionNumbervlocity_cmt__Version__cvlocity_ins__Version__c
Element configPropertySetConfigvlocity_cmt__PropertySet__cvlocity_ins__PropertySet__c
Is Integration ProcedureIsIntegrationProcedurevlocity_cmt__IsIntegrationProcedure__cvlocity_ins__IsIntegrationProcedure__c
FlexCard data sourcesDataSourceConfigvlocity_cmt__Definition__cvlocity_ins__Definition__c
FlexCard layout/statesPropertySetConfig(same field)(same field)
DM input objectInputObjectName (on Item)vlocity_cmt__InterfaceObject__cvlocity_ins__InterfaceObject__c
DM output objectOutputObjectName (on Item)vlocity_cmt__TargetFieldObjectType__cvlocity_ins__TargetFieldObjectType__c

See: references/namespace-guide.md [blocked] for the complete reference including metadata type names for deployment.


CLI Commands Reference

Namespace Detection

bash
# 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)

bash
# Count OmniScriptssf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = false" \  --target-org myorg --json
# Count Integration Proceduressf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = true" \  --target-org myorg --json
# Count FlexCardssf data query --query "SELECT COUNT() FROM OmniUiCard" --target-org myorg --json
# Count Data Mapperssf data query --query "SELECT COUNT() FROM OmniDataTransform" --target-org myorg --json

Dependency Data Extraction (Core Namespace)

bash
# Get OmniScript elements with their configsf 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

SkillRelationshipHow This Skill Helps
sf-industry-commoncore-datamapperProvides namespace and object dependency dataData Mapper authoring uses detected namespace for correct API names
sf-industry-commoncore-integration-procedureProvides namespace and IP dependency mapIP authoring uses dependency graph to avoid circular references
sf-industry-commoncore-omniscriptProvides namespace and element dependency dataOmniScript authoring uses namespace-correct field names
sf-industry-commoncore-flexcardProvides namespace and data source dependency mapFlexCard authoring uses detected IP references for validation
sf-diagram-mermaidConsumes dependency graph for visualizationThis skill generates Mermaid output compatible with sf-diagram-mermaid styling
sf-metadataProvides sObject metadata for Data Mapper analysisObject field validation during dependency extraction
sf-deployDeployment uses namespace-correct metadata typesThis skill provides the correct metadata type names per namespace

Edge Cases

ScenarioHandling
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 dependenciesInclude 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 lengthUse Tooling API or REST API to fetch full JSON body for elements with truncated config.
Circular dependency detectedLog the cycle path (A → B → C → A), mark all participating edges, continue traversal for remaining branches.
Components referencing deleted itemsRecord 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 related skills: /plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-datamapper, /plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-integration-procedure, /plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-omniscript, /plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-flexcard

License

MIT License. Copyright (c) 2026 David Ryan (weytani)

來源與署名

來源:jaganpro/sf-skills位於skills/sf-industry-commoncore-omnistudio-analyze提交53c9956

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架