Loading...
Loading...
Compare original and translation side by side
building-omnistudio-integration-procedurebuilding-omnistudio-omniscriptbuilding-omnistudio-flexcardanalyzing-omnistudio-dependenciesbuilding-omnistudio-integration-procedurebuilding-omnistudio-omniscriptbuilding-omnistudio-flexcardanalyzing-omnistudio-dependencies| 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. |
| 要点 | 详情 |
|---|---|
| Extract与Turbo Extract对比 | Extract使用标准SOQL及关联查询。Turbo Extract使用服务器端编译查询,适用于读密集型、高数据量场景(速度提升10倍以上)。Turbo Extract不支持公式字段、关联列表或写入操作。 |
| Transform为内存操作 | Transform类型的Data Mapper完全在内存中运行,不涉及DML或SOQL操作。用于在Integration Procedure的步骤之间重塑数据结构。适用于JSON到JSON的转换、字段重命名及数据扁平化处理。 |
| Load等同于DML操作 | Load类型的Data Mapper执行插入、更新、Upsert或删除操作。需要配置正确的FLS检查及错误处理机制。部署Load Data Mapper到生产环境前,务必验证字段级安全。 |
| OmniDataTransform元数据 | Data Mapper以OmniDataTransform和OmniDataTransformItem记录形式存储。请使用这些元数据类型名称进行检索与部署,而非旧版DataRaptor API名称。 |
Glob: **/OmniDataTransform*Glob: **/omnistudio/**Glob: **/OmniDataTransform*Glob: **/omnistudio/**| Type | Use Case | Naming Prefix | Supports DML | Supports SOQL |
|---|---|---|---|---|
| Extract | Read data from one or more objects with relationship queries | | No | Yes |
| Turbo Extract | High-volume read-only queries, server-side compiled | | No | Yes (compiled) |
| Transform | In-memory data reshaping between procedure steps | | No | No |
| Load | Write data (insert, update, upsert, delete) | | Yes | No |
[Prefix][Object]_[Purpose]DR_Extract_Account_DetailsDR_TurboExtract_Case_ListDR_Transform_Lead_FlattenDR_Load_Opportunity_Create| 类型 | 使用场景 | 命名前缀 | 支持DML | 支持SOQL |
|---|---|---|---|---|
| Extract | 通过关联查询从一个或多个对象读取数据 | | 否 | 是 |
| Turbo Extract | 高数据量只读查询,服务器端编译 | | 否 | 是(编译后) |
| Transform | 流程步骤间的内存数据重塑 | | 否 | 否 |
| Load | 写入数据(插入、更新、Upsert、删除) | | 是 | 否 |
[前缀][对象]_[用途]DR_Extract_Account_DetailsDR_TurboExtract_Case_ListDR_Transform_Lead_FlattenDR_Load_Opportunity_Createassets/omni-data-transform-extract.jsonassets/omni-data-transform-transform.jsonassets/omni-data-transform-load.jsonassets/omni-data-transform-item.jsonassets/completion-summary-template.mdassets/omni-data-transform-extract.jsonassets/omni-data-transform-transform.jsonassets/omni-data-transform-load.jsonassets/omni-data-transform-item.jsonassets/completion-summary-template.md"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 |
"我发现了[模式],这会导致[问题]。请问我应该: A) 重构为使用[正确模式] B) 继续执行(不推荐)"
| 反模式 | 检测方式 | 影响 |
|---|---|---|
| 提取所有字段 | 未指定字段列表,使用通配符选择 | 性能下降,数据传输量过大 |
| 缺失查找映射 | Load类型引用查找字段但未配置解析 | DML操作失败,外键为空 |
| 未检查FLS就写入 | Load Data Mapper未配置安全验证 | 安全违规,受限配置文件下的数据损坏 |
| 无限制的Extract查询 | Extract未设置LIMIT或过滤条件 | 触发Governor限制,大型对象查询超时 |
| Transform包含副作用 | Transform尝试执行DML或外部调用 | 运行时错误,Transform仅支持内存操作 |
| 硬编码记录ID | 过滤条件或映射中使用15/18位ID字面量 | 跨环境部署失败 |
| 嵌套关联深度>3 | Extract使用深度嵌套的父对象遍历 | 查询性能下降,SOQL复杂度超限 |
| Load未配置错误处理 | 未设置Upsert键或重复规则处理 | 静默数据损坏,重复记录 |
Entity cannot be foundsfdx-project.jsonOmniDataTransformsf apex log list -o <org>allOrNone=falseisSuccess=falseEntity cannot be foundsfdx-project.jsonOmniDataTransformsf apex log list -o <org>allOrNone=falseisSuccess=falseassets/completion-summary-template.mdassets/completion-summary-template.md| Category | Points | Key Rules |
|---|---|---|
| Design & Naming | 20 | Correct type selection; naming follows |
| 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 |
| 类别 | 分值 | 关键规则 |
|---|---|---|
| 设计与命名 | 20 | 类型选择正确;命名遵循 |
| 字段映射 | 25 | 明确指定字段列表(无通配符);输入/输出路径正确;类型转换恰当;空值安全默认值 |
| 数据完整性 | 25 | 所有字段均验证FLS;Load类型配置查找解析;定义Upsert键;配置重复处理机制 |
| 性能 | 15 | 查询设置LIMIT/过滤条件;读密集型场景使用Turbo Extract;关联深度最小化;过滤字段使用索引 |
| 文档 | 15 | OmniDataTransform记录包含描述;字段映射依据已记录;已识别消费组件 |
sf data query -q "SELECT Id,Name,Type FROM OmniDataTransform LIMIT 200" -o <org>sf data query -q "SELECT Id,Name,Type FROM OmniDataTransform LIMIT 200" -o <org>sf data query -q "SELECT Id,Name,InputObjectName,OutputObjectName,LookupObjectName FROM OmniDataTransformItem WHERE OmniDataTransformationId='<id>' LIMIT 200" -o <org>sf data query -q "SELECT Id,Name,InputObjectName,OutputObjectName,LookupObjectName FROM OmniDataTransformItem WHERE OmniDataTransformationId='<id>' LIMIT 200" -o <org>sf project retrieve start -m OmniDataTransform:<Name> -o <org>sf project retrieve start -m OmniDataTransform:<Name> -o <org>sf project deploy start -m OmniDataTransform:<Name> -o <org>sf project deploy start -m OmniDataTransform:<Name> -o <org>assets/omni-data-transform-*.jsonassets/omni-data-transform-item.jsonassets/completion-summary-template.mdassets/omni-data-transform-*.jsonassets/omni-data-transform-item.jsonassets/completion-summary-template.md| From Skill | To building-omnistudio-datamapper | When |
|---|---|---|
| analyzing-omnistudio-dependencies | -> building-omnistudio-datamapper | "Analyze dependencies before creating Data Mapper" |
| generating-custom-object / generating-custom-field | -> building-omnistudio-datamapper | "Describe target object fields before mapping" |
| querying-soql | -> building-omnistudio-datamapper | "Validate Extract query logic" |
| From building-omnistudio-datamapper | To Skill | When |
|---|---|---|
| building-omnistudio-datamapper | -> building-omnistudio-integration-procedure | "Create Integration Procedure that calls this Data Mapper" |
| building-omnistudio-datamapper | -> deploying-metadata | "Deploy Data Mapper to target org" |
| building-omnistudio-datamapper | -> building-omnistudio-omniscript | "Wire Data Mapper output into OmniScript" |
| building-omnistudio-datamapper | -> building-omnistudio-flexcard | "Display Data Mapper Extract results in FlexCard" |
| 来源技能 | 流向building-omnistudio-datamapper | 触发时机 |
|---|---|---|
| analyzing-omnistudio-dependencies | -> building-omnistudio-datamapper | "创建Data Mapper前分析依赖关系" |
| generating-custom-object / generating-custom-field | -> building-omnistudio-datamapper | "映射前描述目标对象字段" |
| querying-soql | -> building-omnistudio-datamapper | "验证Extract查询逻辑" |
| 来源building-omnistudio-datamapper | 流向技能 | 触发时机 |
|---|---|---|
| building-omnistudio-datamapper | -> building-omnistudio-integration-procedure | "创建调用该Data Mapper的Integration Procedure" |
| building-omnistudio-datamapper | -> deploying-metadata | "将Data Mapper部署到目标组织" |
| building-omnistudio-datamapper | -> building-omnistudio-omniscript | "将Data Mapper输出接入OmniScript" |
| building-omnistudio-datamapper | -> building-omnistudio-flexcard | "在FlexCard中展示Data Mapper Extract结果" |
| 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., |
| 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 | |
| Foreign key field name wrong | The parent lookup on |
| 问题 | 解决方案 |
|---|---|
| 大数据量(>10K条记录) | 使用Turbo Extract;通过Integration Procedure添加分页;提醒堆内存限制 |
| 多态查找字段 | 在映射中指定具体对象类型;分别测试每种类型 |
| Extract中包含公式字段 | 标准Extract支持公式字段;Turbo Extract不支持——改用标准Extract |
| 跨对象Load(主从关系) | 先插入父记录,再在单独的Load步骤中插入子记录;使用Integration Procedure编排顺序 |
| 带命名空间前缀的字段 | 字段路径中包含命名空间前缀(如 |
| 多币种组织 | 显式映射CurrencyIsoCode;不要依赖默认币种假设 |
| 依赖RecordType的映射 | Extract中按RecordType过滤;Load中设置RecordTypeId;记录支持的RecordType |
| 草稿状态的Data Mapper无法检索 | |
| 外键字段名称错误 | |
assets/completion-summary-template.mdsf api request rest --method POST --body @file.jsonsf data create record --valuesassets/completion-summary-template.mdsf api request rest --method POST --body @file.jsonsf data create record --values| File | When to Read |
|---|---|
| Phase 3 Generation — template for Extract type OmniDataTransform records |
| Phase 3 Generation — template for Transform type OmniDataTransform records |
| Phase 3 Generation — template for Load type OmniDataTransform records |
| Phase 3 Generation — template for each OmniDataTransformItem field mapping |
| Phase 3 & 5 — scoring output format and completion summary template |
| Phase 3 Guardrails — detailed patterns for field mapping, query optimization, null handling, and performance |
| Phase 2 Design — full naming rules for all Data Mapper types and field mapping conventions |
| 文件 | 读取时机 |
|---|---|
| 阶段3生成——Extract类型OmniDataTransform记录模板 |
| 阶段3生成——Transform类型OmniDataTransform记录模板 |
| 阶段3生成——Load类型OmniDataTransform记录模板 |
| 阶段3生成——每个OmniDataTransformItem字段映射模板 |
| 阶段3 & 5——评分输出格式及完成总结模板 |
| 阶段3规则——字段映射、查询优化、空值处理及性能的详细模式 |
| 阶段2设计——所有Data Mapper类型的完整命名规则及字段映射规范 |