Salesforce使用类型和组件来表示组织配置和 定制。元数据用于管理员控制或配置的组织设置 已安装的应用和程序包应用的信息。
使用命名空间中的类访问 来自 Apex 代码中的任务的元数据,包括:Metadata
- 自定义应用安装或升级 – 在安装(或升级)期间或之后,您的应用可以 创建或更新元数据,让用户配置您的应用。
- 安装后自定义应用程序 – 安装应用程序后,您可以在 Apex 允许管理员使用应用提供的 UI 配置应用,而不是使用 管理员手动使用标准的 Salesforce 设置 UI。
- 安全访问受保护的元数据 – 更新应用在内部使用的元数据 而不向用户公开这些类型和组件。
- 创建自定义配置工具 – 使用 Apex 中的元数据为 管理员自定义应用和包。
Apex 中的元数据访问适用于使用 API 版本 40.0 及更高版本的 Apex 类。
有关元数据类型和组件的更多信息,请参阅元数据 API 开发人员 指南和自定义元数据 类型实现指南。
- 检索和部署元数据 使用类检索和部署元数据
。Metadata.Operations - 支持的元数据类型
Apex 支持元数据类型和组件的子集。 - 安全注意事项 使用 Apex 访问元数据时,
请注意安全注意事项。 - 测试元数据部署
必须正确测试访问元数据的 Apex 代码。
检索和部署元数据
使用类检索和部署元数据。
Metadata.Operations
使用该方法 从当前组织同步检索元数据。提供元数据组件的列表 要检索的名称。Salesforce 返回匹配组件数据的列表, 由派生自 的组件类表示。Metadata.Operations.retrieve()Metadata.Metadata
使用该方法 将元数据异步部署到当前组织。部署排队等待异步 加工。部署元数据时,可以创建和更新组件,但不能删除 组件。应用和包可以部署的组件存在限制,并且存在限制 哪些类型的应用和包可以部署到哪些类型的组织。有关详细信息,请参阅安全注意事项。Metadata.Operations.enqueueDeployment()
检索和部署元数据时,请使用元数据组件的全名。完整的 name 可以包括命名空间、元数据类型和组件名称。如果您要更新 组件,您还需要限定 全名。例如,MDType1__mdt名为 “myPackage”命名空间中包含的“Component1”是 “myPackage__MDType1__mdt.myPackage__Component1”。有关元数据的更多信息 组件全名语法,详见元数据库 键入元数据 API 开发人员指南。
您可以在安装后脚本中检索和部署元数据。在卸载脚本中,您可以 仅从 Apex 代码中检索元数据,而不部署元数据。
请参阅 Metadata.Operations 用于检索和部署元数据的代码示例。
支持的元数据类型
Apex 支持元数据类型和组件的子集。
Apex 中的元数据访问仅限于支持所述用例的类型和组件 在元数据中。应用和包可以使用 Apex 中的元数据功能进行检索和部署 以下元数据类型和组件:
- 自定义元数据类型的记录
- 布局
安全注意事项
使用 Apex 访问元数据时,请注意安全注意事项。
通常,订阅者组织中安装的 Apex 类可以访问任何公共的、受支持的 订阅者组织中的元数据类型或组件。受保护的元数据,例如自定义元数据 标记为受保护的元数据类型只能由 Apex 类访问 与受保护的元数据相同的命名空间。
此外,对于托管包,如果托管包未获得 Salesforce 的批准 通过安全审查,包中的 Apex 类无法访问元数据(public 或 protected),除非 通过 已启用 Apex 组织首选项。此首选项位于“设置”|”如果管理员或开发人员正在安装托管软件包,则必须启用 Apex 设置 尚未通过应用测试或试点目的的安全审核。
对于部署,由于使用异步 Apex,因此排队 部署作业和部署回调在当前 组织。排队的部署作业和回调受调控器限制的约束。请参阅 Lightning 平台顶点限制。Metadata.Operations.enqueueDeployment()
通过 Apex 访问元数据的应用必须通知用户该应用可以检索或部署 订阅者组织中的元数据。对于访问元数据的安装,请在 包裹的描述。您可以编写自己的通知,也可以使用此示例:
This package can access and change metadata outside its namespace in the Salesforce org where it’s installed.
Salesforce 在安全审查期间验证通知。有关详细信息,请参阅 ISVforce 指南。
测试元数据部署
访问元数据的 Apex 代码必须经过正确测试。
要为元数据部署提供 Apex 测试覆盖率,请编写验证两者设置的测试 的部署请求和部署结果的处理。
部署请求代码测试验证获取的元数据组件和组件值 创建并断言包含 确切地说,需要部署什么。DeployContainer
部署结果代码测试验证是否处理了预期和意外结果。Salesforce 通常将 Your 作为 异步部署过程。因此,要在部署之外测试回调,请执行以下操作 过程中,创建直接使用回调类的测试。您还必须创建测试和实例来测试您的方法。DeployCallbackDeployCallbackDeployResultsDeployCallbackContextDeployCallback.handleResults()
创建 的测试实例时,为 子类并提供你自己的 的实现。DeployCallbackContextDeployCallbackContextgetCallbackJobId()
// DeployCallbackContext subclass for testing that returns myJobId
public class TestingDeployCallbackContext extends Metadata.DeployCallbackContext {
private myJobId = null; // define to a canned ID you can use for testing
public override Id getCallbackJobId() {
return myJobId;
}
}