19 KiB
19 KiB
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: 是否启用 FeedsenableHistory: 是否启用历史跟踪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: 是否为外部 IDindexed: 是否索引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: 部署 IDstatus: 部署状态(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: 异步操作 ID(String)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. 分析和报告
- 创建和更新报告
- 管理仪表板
- 配置数据集
- 设置分析工作空间
注意事项
- API 限制: 有 API 调用次数和部署大小的限制
- 依赖关系: 需要正确处理组件间的依赖关系
- 部署顺序: 某些组件需要按特定顺序部署
- 测试要求: 部署时可能需要运行测试
- 版本兼容性: 不同版本的 Salesforce 可能有不同的元数据结构
- 权限要求: 需要适当的 API 权限才能使用这些功能
- 异步操作: 部署操作是异步的,需要轮询状态
- 错误处理: 需要正确处理部署错误和警告
相关文档
文件分类
核心基类
- 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 的所有元数据类型和操作。