🧩 一、什么是 Salesforce 元数据(Metadata)
在 Salesforce 中,元数据(Metadata) 是指系统配置和定制的定义信息,用来描述应用的结构与行为。
换句话说:
数据(Data) 是业务运行的内容,
元数据(Metadata) 是告诉系统“数据该怎么组织和运行”的规则。
| 类型 | 示例 | 说明 |
|---|---|---|
| 数据(Data) | Account 记录、Contact 记录 | 业务数据 |
| 元数据(Metadata) | Account 对象定义、字段定义、验证规则、页面布局 | 系统配置定义 |
🧱 二、元数据模型的核心层级
Salesforce 的元数据模型是分层的,类似下图结构:
┌───────────────────────────────┐
│ Salesforce Org(组织) │
│ ├── Object(对象定义) │
│ │ ├── Field(字段定义) │
│ │ ├── ValidationRule │
│ │ ├── RecordType │
│ │ └── PageLayout │
│ ├── ApexClass / Trigger │
│ ├── Workflow / Flow / PB │
│ ├── PermissionSet / Profile │
│ ├── CustomApplication │
│ ├── LightningPage / Tab │
│ └── SharingRules / Queues │
└───────────────────────────────┘
每个元数据组件(Metadata Component)都可以独立定义、导出、部署。
🧩 三、元数据的主要类型(Metadata Types)
🧱 1、数据模型(Data Model Metadata)
定义 Salesforce 数据结构(对象、字段、关系等)
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 对象定义 | CustomObject, ExternalObject, PlatformEvent | 自定义对象、外部对象、平台事件 |
| 字段定义 | CustomField, Index, GlobalValueSet, ValueSet | 字段、索引、选择列表定义 |
| 记录类型与布局 | RecordType, PageLayout, CompactLayout | 记录类型与界面布局 |
| 关系与命名 | Relationship, FieldSet, BusinessProcess | 对象间关系、字段集、业务流程 |
| 数据规则 | ValidationRule, DuplicateRule, MatchingRule | 数据校验与重复检测 |
| 数据模板 | CustomMetadata, CustomSetting | 元数据记录与设置数据 |
⚙️ 2、自动化与逻辑(Automation & Logic Metadata)
定义系统的自动化行为与业务逻辑。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 工作流与审批 | Workflow, WorkflowRule, ApprovalProcess, OutboundMessage | 自动化规则与审批流 |
| 流程与自动化 | Flow, ProcessBuilder, FlowDefinition, FlowCategory | Flow(Lightning Flow)定义 |
| 触发与编程逻辑 | ApexClass, ApexTrigger, ApexPage, ApexComponent, ApexTestSuite | Apex 代码与触发器 |
| 调度与任务 | ApexScheduledJob, BatchJobDefinition, Queue | 定时任务与队列 |
| 平台事件 | PlatformEventChannel, PlatformEventSubscriberConfig | 事件驱动架构配置 |
🎨 3、用户界面(User Interface Metadata)
定义 Salesforce 的 UI 层,包括 Lightning、页面、组件、导航等。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 页面与布局 | PageLayout, LightningPage, FlexiPage, HomePageLayout | 页面布局与 Lightning 页面 |
| 组件与模板 | AuraDefinitionBundle, LightningComponentBundle, LWCResource | Aura / LWC 组件 |
| 应用与导航 | CustomApplication, AppMenu, CustomTab, CustomPageWebLink, CustomHelpMenuSection | 应用、导航菜单、标签页 |
| 主题与品牌 | Theme, BrandingSet, CustomThemeLayout | 主题与品牌样式 |
| 快捷操作与按钮 | QuickAction, GlobalQuickAction, WebLink, ListView | 快捷操作与按钮定义 |
| 移动配置 | MobileApplicationDetail, CompactLayoutAssignment | 移动端界面配置 |
🔐 4、安全与访问控制(Security & Access Metadata)
定义用户访问权限、共享规则、角色层级等。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 用户权限 | Profile, PermissionSet, PermissionSetGroup, MutingPermissionSet | 权限与访问控制 |
| 角色与共享 | Role, SharingRules, SharingSet, SharingOwnerRule, Territory2 | 共享与区域规则 |
| 登录与认证 | AuthProvider, ConnectedApp, SamlSsoConfig, SingleSignOnSettings | 单点登录与认证配置 |
| 会话与策略 | SessionSettings, PasswordPolicies, LoginFlow, NetworkAccess | 登录策略与安全控制 |
| 审计与追踪 | FieldAuditTrail, TransactionSecurityPolicy, EventMonitoring | 审计与安全事件监控 |
🧭 5、应用与导航结构(App & Navigation Metadata)
定义 Salesforce 应用、导航、主页、选项卡等。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 应用定义 | CustomApplication, AppMenu, AppMenuItem | 应用与菜单 |
| 导航配置 | NavigationMenu, AppPage, LightningPage | 导航与页面结构 |
| 标签与主页 | CustomTab, HomePageComponent, HomePageLayout | 标签页与主页布局 |
| 主题与品牌 | Theme, BrandingSet, CustomThemeLayout | 视觉主题与样式 |
📊 6、分析与报表(Analytics Metadata)
定义报表、仪表盘、报表类型等。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 报表 | Report, ReportType, ReportFolder | 报表与报表类型 |
| 仪表盘 | Dashboard, DashboardFolder, DashboardComponent | 仪表盘配置 |
| Einstein Analytics | WaveDashboard, WaveDataset, WaveLens, WaveRecipe | Tableau CRM(旧名 Einstein Analytics)组件 |
| 报表安全 | FolderShare, ReportSharingSettings | 报表文件夹共享 |
🔄 7、集成与外部系统(Integration Metadata)
定义外部连接、API、命名凭据、外部对象等。
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 外部数据 | ExternalDataSource, ExternalObject, ExternalServiceRegistration | 外部数据连接 |
| 认证与凭据 | NamedCredential, AuthProvider, ConnectedApp | 外部系统认证 |
| API 定义 | ApexRestService, PlatformEventChannel, ExternalService | 外部接口定义 |
| 集成事件 | PlatformEvent, EventRelayConfig, ChangeDataCapture | 事件与数据同步 |
| Outbound 集成 | OutboundMessage, WorkflowOutboundMessage | 外部消息推送 |
🧩 8、AI 与 Einstein(AI / ML Metadata)
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 预测模型 | PredictionDefinition, PredictionField | Einstein Prediction Builder |
| 推荐模型 | RecommendationDefinition, RecommendationStrategy | Einstein Recommendations |
| AI 设置 | EinsteinSettings, AIApplication | AI 应用配置 |
🧰 9、开发与部署(Development & Deployment Metadata)
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 代码与资源 | ApexClass, ApexTrigger, StaticResource, Document, ContentAsset | 代码与静态资源 |
| 部署与包 | Package, PackageVersion, UnlockedPackage, InstalledPackage | 包与版本管理 |
| 环境配置 | CustomLabel, CustomPermission, CustomMetadata | 环境常量与权限 |
| 测试与监控 | ApexTestSuite, TestSettings, MonitoringSnapshot | 测试与监控配置 |
🧮 10、平台与系统设置(Platform Settings Metadata)
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 公司与组织设置 | CompanySettings, OrgPreferenceSettings, EmailAdministrationSettings | 组织级设置 |
| 用户界面设置 | UserInterfaceSettings, ChatterSettings, LightningExperienceSettings | UI 行为控制 |
| 安全策略 | SecuritySettings, SessionSettings, PasswordPolicies | 安全策略 |
| 特性开关 | FeatureParameter, FeatureManagementSettings | 功能启用配置 |
| 本地化与语言 | Translations, LanguageSettings, LocaleSettings | 多语言与本地化 |
🧾 11、部署与 DevOps 支持(Deployment Metadata)
| 分类 | 元数据类型 | 说明 |
|---|---|---|
| 部署容器 | DeploymentSettings, DeploymentPlan, DeploymentArtifact | 部署计划与配置 |
| 变更集 | ChangeSet, DeploymentConnection | 环境迁移 |
| 源代码管理 | SourceMember, ScratchOrgDefinition, DevHubSettings | SFDX 与源跟踪 |
🧠 四、元数据模型的访问方式
Salesforce 提供多种方式访问与管理元数据:
| 工具 / 接口 | 说明 | 典型用途 |
|---|---|---|
| Setup UI | Salesforce 设置界面 | 直接配置对象、字段、布局等 |
| Metadata API | XML 格式导出/部署元数据 | DevOps、CI/CD、版本控制 |
| Tooling API | 以对象化方式访问元数据定义 | IDE、代码分析、Schema 浏览 |
| Salesforce DX (SFDX) | 命令行工具 | 源代码管理、版本化部署 |
| Change Set | 组织间迁移工具 | 沙盒 → 生产环境迁移 |
| VS Code + Salesforce Extension | 开发者工具 | 代码与元数据同步 |
⚙️ 五、元数据的存储与结构(内部模型)
在 Salesforce 内部,元数据以 XML 文件 或 元数据对象(Metadata Objects) 的形式存在。
例如,一个自定义对象 Invoice__c 的元数据定义文件(简化版)如下:
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<label>Invoice</label>
<pluralLabel>Invoices</pluralLabel>
<nameField>
<type>AutoNumber</type>
<label>Invoice Number</label>
<displayFormat>INV-{0000}</displayFormat>
</nameField>
<fields>
<fullName>Amount__c</fullName>
<label>Amount</label>
<type>Currency</type>
</fields>
<fields>
<fullName>DueDate__c</fullName>
<label>Due Date</label>
<type>Date</type>
</fields>
<deploymentStatus>Deployed</deploymentStatus>
<sharingModel>ReadWrite</sharingModel>
</CustomObject>
这就是 Salesforce 元数据模型的“底层结构”形式。
🧩 六、元数据与数据的关系
| 对比项 | 元数据 | 数据 |
|---|---|---|
| 作用 | 定义结构与逻辑 | 存储业务内容 |
| 存储位置 | Metadata Repository | Database Record |
| 修改方式 | Setup / Metadata API | UI / DML / API |
| 示例 | 自定义字段、布局、验证规则 | Account 记录、Case 记录 |
| 迁移方式 | Change Set / Metadata API | Data Loader / ETL |
🔗 七、元数据模型的可视化(简化结构)
graph TD
A[Org] --> B[CustomObject]
B --> C[CustomField]
B --> D[ValidationRule]
B --> E[PageLayout]
A --> F[Profile]
A --> G[PermissionSet]
A --> H[Workflow / Flow]
A --> I[ApexClass / Trigger]
A --> J[LightningPage]
A --> K[Report / Dashboard]
🧰 八、元数据模型管理的最佳实践
-
使用版本控制(Git)管理元数据
- 使用 Salesforce DX 将元数据文件化(Source Format)
- 每次修改通过 Pull Request 审查
-
环境分层
- 开发环境(Dev Sandbox)
- 测试环境(UAT Sandbox)
- 生产环境(Production)
-
自动化部署
- 使用 CI/CD 工具(如 GitHub Actions、Jenkins、Azure DevOps)
- 通过
sfdx force:source:deploy自动部署
-
模块化设计
- 将元数据按功能模块拆分(对象、自动化、权限)
-
元数据依赖管理
- 注意对象、字段、布局、权限之间的依赖顺序
✅ 九、总结对比
| 项目 | 数据模型 | 元数据模型 |
|---|---|---|
| 定义内容 | 业务数据结构(对象、字段、关系) | 系统配置与逻辑定义 |
| 存储位置 | 数据库(Record) | 元数据仓库(XML / Metadata Repo) |
| 访问方式 | SOQL / API / UI | Metadata API / Tooling API / Setup |
| 迁移方式 | Data Loader / API | Change Set / SFDX / Metadata API |
| 示例 | Account 记录、Contact 记录 | Account 对象定义、布局、权限集 |