datai/datai-scenes/datai-scene-salesforce/docs/reference-code/sforce/docs/metadata-module.md

19 KiB
Raw Blame History

com.sforce.soap.metadata 模块说明

概述

com.sforce.soap.metadata 模块是 Salesforce Metadata API 的 Java 客户端实现,包含了 Salesforce 元数据类型的完整定义,用于创建、读取、更新和删除 Salesforce 组织中的元数据。

主要功能

1. 元数据类型定义

模块包含了数百种元数据类型,涵盖了 Salesforce 的各个方面:

核心组件类型

  • ApexClass: Apex 类定义
  • ApexTrigger: Apex 触发器定义
  • ApexPage: Visualforce 页面定义
  • ApexComponent: Visualforce 组件定义
  • CustomObject: 自定义对象定义
  • CustomField: 自定义字段定义
  • CustomTab: 自定义标签页定义

配置类型

  • AppSettings: 应用程序设置
  • ApprovalProcess: 审批流程定义
  • AssignmentRules: 分配规则定义
  • Workflow: 工作流规则定义
  • ValidationRule: 验证规则定义
  • SharingRule: 共享规则定义

分析类型

  • AnalyticsDashboard: 分析仪表板
  • AnalyticsDataset: 分析数据集
  • AnalyticsWorkspace: 分析工作空间
  • Report: 报告定义
  • Dashboard: 仪表板定义

AI 和自动化类型

  • AIApplication: AI 应用程序
  • Bot: 机器人定义
  • Flow: Flow 定义
  • ProcessBuilder: 流程构建器定义

UI 和用户体验类型

  • CustomTab: 自定义标签页
  • CompactLayout: 紧凑布局
  • PageLayout: 页面布局
  • ListView: 列表视图
  • QuickAction: 快速操作

2. 部署操作

  • DeployOptions: 部署选项配置
  • DeployResult: 部署结果
  • DeployMessage: 部署消息
  • DeployDetails: 部署详细信息
  • DeployStatus: 部署状态

3. 异步操作

  • AsyncResult: 异步操作结果
  • AsyncRequestState: 异步请求状态

4. 删除操作

  • DeleteResult: 删除操作结果

5. 检索操作

  • RetrieveRequest: 检索请求配置
  • RetrieveResult: 检索结果
  • RetrieveMessage: 检索消息

6. 检查部署状态

  • CheckDeployStatus: 检查部署状态
  • CheckRetrieveStatus: 检查检索状态

7. 描述元数据

  • DescribeMetadataResult: 描述元数据结果
  • DescribeValueType: 描述值类型

8. 列出元数据

  • ListMetadataQuery: 列出元数据查询
  • ListMetadataResult: 列出元数据结果
  • ListMetadata: 列出元数据项

核心类

Metadata

作用: 所有元数据类型的基类,提供元数据的基本属性。

主要属性:

  • fullName: 元数据的完整名称格式namespace.name

使用示例:

// Metadata 是所有元数据类型的基类
// 所有具体的元数据类型(如 CustomObject、ApexClass 等)都继承自它
Metadata metadata = new CustomObject();
metadata.setFullName("MyCustomObject__c");

CustomObject

作用: 定义 Salesforce 自定义对象的元数据。

主要属性:

  • fullName: 对象的完整名称
  • label: 对象的显示标签
  • pluralLabel: 对象的复数标签
  • description: 对象的描述
  • deploymentStatus: 部署状态Deployed、InDevelopment、Deleted
  • sharingModel: 共享模型ReadWrite、Read、Private、ReadWriteTransfer等
  • fields: 对象的字段列表CustomField[]
  • actionOverrides: 动作覆盖列表
  • businessProcesses: 业务流程列表
  • recordTypes: 记录类型列表
  • searchLayouts: 搜索布局列表
  • listViews: 列表视图列表
  • validationRules: 验证规则列表
  • sharingRules: 共享规则列表
  • webLinks: Web 链接列表
  • enableFeeds: 是否启用 Feeds
  • enableHistory: 是否启用历史跟踪
  • enableActivities: 是否启用活动

使用示例:

CustomObject customObject = new CustomObject();
customObject.setFullName("MyCustomObject__c");
customObject.setLabel("My Custom Object");
customObject.setPluralLabel("My Custom Objects");
customObject.setDeploymentStatus("Deployed");
customObject.setSharingModel("ReadWrite");
customObject.setDescription("自定义对象示例");

// 添加字段
CustomField nameField = new CustomField();
nameField.setFullName("MyCustomObject__c.Name__c");
nameField.setType("Text");
nameField.setLabel("Name");

customObject.setFields(new CustomField[]{nameField});

CustomField

作用: 定义自定义对象的字段。

主要属性:

  • fullName: 字段的完整名称
  • type: 字段类型Text、Number、Date、Email、Checkbox、Picklist、Lookup、MasterDetail 等)
  • label: 字段的显示标签
  • required: 是否必填
  • defaultValue: 默认值
  • description: 字段描述
  • helpText: 帮助文本
  • length: 字段长度(适用于 Text 类型)
  • precision: 精度(适用于 Number 类型)
  • scale: 小数位数(适用于 Number 类型)
  • unique: 是否唯一
  • externalId: 是否为外部 ID
  • indexed: 是否索引
  • formula: 公式表达式(适用于 Formula 类型)
  • picklistValues: 选项列表值(适用于 Picklist 类型)
  • referenceTo: 关联对象(适用于 Lookup、MasterDetail 类型)
  • relationshipName: 关系名称
  • businessOwnerUser: 业务负责人用户
  • businessOwnerGroup: 业务负责人组
  • businessStatus: 业务状态

使用示例:

// 文本字段
CustomField textField = new CustomField();
textField.setFullName("MyCustomObject__c.Email__c");
textField.setType("Email");
textField.setLabel("Email Address");
textField.setRequired(true);
textField.setDescription("用户邮箱地址");

// 数字字段
CustomField numberField = new CustomField();
numberField.setFullName("MyCustomObject__c.Amount__c");
numberField.setType("Number");
numberField.setLabel("Amount");
numberField.setPrecision(18);
numberField.setScale(2);

// 选项列表字段
CustomField picklistField = new CustomField();
picklistField.setFullName("MyCustomObject__c.Status__c");
picklistField.setType("Picklist");
picklistField.setLabel("Status");

PicklistValue[] values = new PicklistValue[] {
    new PicklistValue("Active", "Active"),
    new PicklistValue("Inactive", "Inactive")
};
picklistField.setPicklistValues(values);

ApexClass

作用: 定义 Apex 类的元数据,继承自 MetadataWithContent。

主要属性:

  • fullName: 类的完整名称
  • content: 类的源代码Base64 编码)
  • apiVersion: API 版本double 类型,如 58.0
  • status: 类的状态Active、Deleted、InDevelopment
  • packageVersions: 包版本信息数组

使用示例:

ApexClass apexClass = new ApexClass();
apexClass.setFullName("MyClass");
apexClass.setContent("public class MyClass {\n    public void hello() {\n        System.debug('Hello World');\n    }\n}");
apexClass.setApiVersion(58.0);
apexClass.setStatus("Active");

DeployOptions

作用: 配置元数据部署的选项。

主要属性:

  • allowMissingFiles: 是否允许缺少文件boolean
  • autoUpdatePackage: 是否自动更新包boolean
  • checkOnly: 是否只检查不部署boolean
  • ignoreWarnings: 是否忽略警告boolean
  • performRetrieve: 是否执行检索boolean
  • purgeOnDelete: 删除时是否清除boolean
  • rollbackOnError: 出错时是否回滚boolean
  • testLevel: 测试级别NoTestRun、RunSpecifiedTests、RunLocalTests、RunAllTestsInOrg
  • runTests: 指定要运行的测试类String[]
  • singlePackage: 是否为单个包boolean
  • validateOnly: 是否仅验证boolean

使用示例:

DeployOptions options = new DeployOptions();
options.setCheckOnly(true);
options.setTestLevel("RunSpecifiedTests");
options.setRunTests(new String[]{"MyTestClass", "AnotherTestClass"});
options.setIgnoreWarnings(false);
options.setRollbackOnError(true);

DeployResult

作用: 表示元数据部署的结果。

主要属性:

  • id: 部署 ID
  • status: 部署状态Queued、InProgress、Succeeded、Failed、Canceled
  • success: 是否成功boolean
  • createdDate: 创建日期
  • startDate: 开始日期
  • completedDate: 完成日期
  • numberComponentErrors: 组件错误数int
  • numberComponentsDeployed: 部署的组件数int
  • numberComponentsTotal: 总组件数int
  • numberTestErrors: 测试错误数int
  • numberTestsCompleted: 完成的测试数int
  • numberTestsTotal: 总测试数int
  • details: 部署详细信息DeployDetails
  • messages: 部署消息DeployMessage[]
  • checkOnly: 是否为检查模式boolean
  • canceledBy: 取消者
  • canceledByName: 取消者名称
  • errorStatusCode: 错误状态码
  • errorMessage: 错误消息

使用示例:

DeployResult result = connection.deploy(zipFile, options);
if (result.isSuccess()) {
    System.out.println("部署成功");
    System.out.println("部署组件数: " + result.getNumberComponentsDeployed());
    System.out.println("运行测试数: " + result.getNumberTestsCompleted());
} else {
    System.out.println("部署失败: " + result.getStatus());
    for (DeployMessage message : result.getMessages()) {
        System.out.println("错误: " + message.getProblem());
    }
}

DeleteResult

作用: 表示元数据删除操作的结果。

主要属性:

  • fullName: 删除的元数据完整名称String
  • success: 是否删除成功boolean
  • errors: 错误数组Error[]

使用示例:

DeleteResult[] results = connection.deleteMetadata("CustomObject", new String[]{"MyCustomObject__c"});

for (DeleteResult result : results) {
    if (result.isSuccess()) {
        System.out.println("成功删除: " + result.getFullName());
    } else {
        System.out.println("删除失败: " + result.getFullName());
        for (Error error : result.getErrors()) {
            System.out.println("  错误: " + error.getMessage());
        }
    }
}

AsyncResult

作用: 表示异步操作的结果。

主要属性:

  • id: 异步操作 IDString
  • done: 操作是否完成boolean
  • message: 操作消息String
  • state: 操作状态AsyncRequestState

使用示例:

AsyncResult asyncResult = connection.deploy(zipFile, options);
String asyncId = asyncResult.getId();

// 轮询检查状态
while (!asyncResult.isDone()) {
    asyncResult = connection.checkStatus(asyncId);
    Thread.sleep(5000);
}

if (asyncResult.getMessage() != null) {
    System.out.println("操作消息: " + asyncResult.getMessage());
}

DeployMessage

作用: 部署过程中的消息,包含成功或失败信息。

主要属性:

  • changed: 是否已更改boolean
  • columnNumber: 列号int
  • componentType: 组件类型String
  • fileName: 文件名String
  • fullName: 完整名称String
  • lineNumber: 行号int
  • problem: 问题描述String
  • success: 是否成功boolean
  • componentType: 组件类型(如 ApexClass、CustomObject 等)

使用示例:

for (DeployMessage message : result.getMessages()) {
    if (message.isSuccess()) {
        System.out.println("成功: " + message.getFullName());
    } else {
        System.out.println("失败: " + message.getFullName());
        System.out.println("  问题: " + message.getProblem());
        System.out.println("  位置: " + message.getFileName() + ":" + 
                          message.getLineNumber() + ":" + message.getColumnNumber());
    }
}

DeployDetails

作用: 部署的详细信息,包含组件级别的成功和失败信息。

主要属性:

  • componentFailures: 组件失败消息数组DeployMessage[]
  • componentSuccesses: 组件成功消息数组DeployMessage[]
  • runTestResult: 测试运行结果RunTestResult
  • retrieveResult: 检索结果RetrieveResult

使用示例:

DeployDetails details = result.getDetails();

System.out.println("成功部署的组件:");
for (DeployMessage success : details.getComponentSuccesses()) {
    System.out.println("  " + success.getFullName());
}

System.out.println("失败的组件:");
for (DeployMessage failure : details.getComponentFailures()) {
    System.out.println("  " + failure.getFullName() + ": " + failure.getProblem());
}

使用场景

1. 元数据部署

  • 部署 Apex 类、触发器、页面
  • 创建自定义对象和字段
  • 更新现有元数据
  • 验证部署前的更改

2. 元数据检索

  • 检索组织中的元数据
  • 导出元数据到本地
  • 备份元数据配置
  • 分析元数据结构

3. CI/CD 集成

  • 自动化部署流程
  • 持续集成测试
  • 环境间元数据同步
  • 版本控制集成

4. 元数据管理

  • 批量更新元数据
  • 删除不需要的组件
  • 重命名和重构
  • 元数据依赖管理

5. 分析和报告

  • 创建和更新报告
  • 管理仪表板
  • 配置数据集
  • 设置分析工作空间

注意事项

  1. API 限制: 有 API 调用次数和部署大小的限制
  2. 依赖关系: 需要正确处理组件间的依赖关系
  3. 部署顺序: 某些组件需要按特定顺序部署
  4. 测试要求: 部署时可能需要运行测试
  5. 版本兼容性: 不同版本的 Salesforce 可能有不同的元数据结构
  6. 权限要求: 需要适当的 API 权限才能使用这些功能
  7. 异步操作: 部署操作是异步的,需要轮询状态
  8. 错误处理: 需要正确处理部署错误和警告

相关文档

文件分类

核心基类

  • Metadata.java - 元数据基类
  • MetadataWithContent.java - 带内容的元数据基类

Apex 相关

  • ApexClass.java - Apex 类
  • ApexTrigger.java - Apex 触发器
  • ApexPage.java - Visualforce 页面
  • ApexComponent.java - Visualforce 组件
  • ApexTestSuite.java - Apex 测试套件
  • ApexSettings.java - Apex 设置
  • ApexCodeUnitStatus.java - Apex 代码单元状态枚举

自定义对象相关

  • CustomObject.java - 自定义对象
  • CustomField.java - 自定义字段
  • CustomIndex.java - 自定义索引
  • CustomLabel.java - 自定义标签
  • CustomTab.java - 自定义标签页
  • CustomObjectTranslation.java - 自定义对象翻译

部署相关

  • DeployOptions.java - 部署选项
  • DeployResult.java - 部署结果
  • DeployMessage.java - 部署消息
  • DeployDetails.java - 部署详细信息
  • DeployStatus.java - 部署状态
  • CancelDeployResult.java - 取消部署结果
  • CheckDeployStatus.java - 检查部署状态

检索相关

  • RetrieveRequest.java - 检索请求
  • RetrieveResult.java - 检索结果
  • RetrieveMessage.java - 检索消息
  • CheckRetrieveStatus.java - 检查检索状态

删除相关

  • DeleteResult.java - 删除结果

异步操作相关

  • AsyncResult.java - 异步结果
  • AsyncRequestState.java - 异步请求状态

AI 和自动化相关

  • AIApplication.java - AI 应用
  • AIApplicationConfig.java - AI 应用配置
  • AIApplicationStatus.java - AI 应用状态
  • AIApplicationType.java - AI 应用类型
  • AIFilterOperation.java - AI 过滤操作
  • AIFilterUnit.java - AI 过滤单元
  • AIPredictionType.java - AI 预测类型
  • AIScoringMode.java - AI 评分模式
  • AIScoringStep.java - AI 评分步骤
  • AIValueType.java - AI 值类型
  • Bot.java - 机器人
  • BotBlock.java - 机器人块
  • BotDialog.java - 机器人对话框
  • BotMessage.java - 机器人消息
  • BotSettings.java - 机器人设置
  • BotType.java - 机器人类型
  • BotVersion.java - 机器人版本
  • Flow.java - Flow
  • FlowDefinition.java - Flow 定义

分析相关

  • AnalyticsDashboard.java - 分析仪表板
  • AnalyticsDataset.java - 分析数据集
  • AnalyticsWorkspace.java - 分析工作空间
  • AnalyticsSettings.java - 分析设置
  • Dashboard.java - 仪表板
  • Report.java - 报告
  • ReportType.java - 报告类型

UI 相关

  • PageLayout.java - 页面布局
  • CompactLayout.java - 紧凑布局
  • ListView.java - 列表视图
  • QuickAction.java - 快速操作
  • CustomTab.java - 自定义标签页
  • MobileLayout.java - 移动布局
  • MiniPageLayout.java - 迷你页面布局

配置相关

  • AppSettings.java - 应用设置
  • ApprovalProcess.java - 审批流程
  • AssignmentRules.java - 分配规则
  • Workflow.java - 工作流
  • ValidationRule.java - 验证规则
  • SharingRule.java - 共享规则
  • SharingCriteria.java - 共享条件
  • SharingRecalculation.java - 共享重新计算

Aura 相关

  • AuraDefinitionBundle.java - Aura 定义包
  • AuraDefinition.java - Aura 定义
  • AuraDefinitions.java - Aura 定义集合

LWC 相关

  • LightningComponentBundle.java - Lightning 组件包
  • LightningComponentResource.java - Lightning 组件资源

设置相关

  • AccountSettings.java - 账户设置
  • ActivitiesSettings.java - 活动设置
  • AddressSettings.java - 地址设置
  • BillingSettings.java - 账单设置
  • CaseSettings.java - 案例设置
  • CampaignSettings.java - 活动设置
  • ChatterSettings.java - Chatter 设置
  • CompanySettings.java - 公司设置
  • ContractSettings.java - 合同设置
  • EmailSettings.java - 邮件设置
  • EntitlementSettings.java - 权利设置
  • ForecastingSettings.java - 预测设置
  • IdeasSettings.java - Ideas 设置
  • KnowledgeSettings.java - 知识设置
  • MobileSettings.java - 移动设置
  • NameSettings.java - 名称设置
  • OpportunitySettings.java - 商机设置
  • ProductSettings.java - 产品设置
  • QuoteSettings.java - 报价设置
  • SecuritySettings.java - 安全设置
  • UserSettings.java - 用户设置

认证相关

  • AuthProvider.java - 认证提供者
  • AuthProviderType.java - 认证提供者类型
  • ConnectedApp.java - 连接应用
  • OAuthSettings.java - OAuth 设置

其他重要类型

  • Error.java - 错误信息
  • Package.java - 包定义
  • PackageTypeMembers.java - 包类型成员
  • PackageVersion.java - 包版本
  • Profile.java - 配置文件
  • PermissionSet.java - 权限集
  • Role.java - 角色
  • Group.java - 组
  • Queue.java - 队列
  • User.java - 用户
  • Folder.java - 文件夹
  • ReportFolder.java - 报告文件夹
  • DashboardFolder.java - 仪表板文件夹
  • EmailTemplate.java - 邮件模板
  • Letterhead.java - 信头
  • FolderShare.java - 文件夹共享

枚举类型

  • APIAccessLevel.java - API 访问级别
  • APIType.java - API 类型
  • ActionLinkType.java - 操作链接类型
  • ActionOverrideType.java - 操作覆盖类型
  • ActionSubtype.java - 操作子类型
  • AnalyticsActionType.java - 分析操作类型
  • AnalyticsWidgetType.java - 分析小组件类型
  • AppMenuType.java - 应用菜单类型
  • AssignmentPolicyType.java - 分配策略类型
  • AssignmentType.java - 分配类型
  • AssociationType.java - 关联类型
  • BlankValueBehavior.java - 空白值行为
  • CapacityModel.java - 容量模型
  • CapacityType.java - 容量类型
  • ChannelMode.java - 渠道模式
  • DeploymentStatus.java - 部署状态
  • FieldType.java - 字段类型
  • FlowProcessType.java - Flow 进程类型
  • LogCategory.java - 日志类别
  • LogCategoryLevel.java - 日志级别
  • LogType.java - 日志类型
  • SharingModel.java - 共享模型
  • TestLevel.java - 测试级别
  • TriggerType.java - 触发器类型

注意: 该模块共包含 2136 个 Java 文件,涵盖了 Salesforce Metadata API 的所有元数据类型和操作。