What is the Apex Metadata API? | All You Need to Know
Let’s say that you support multiple orgs, and you’ve created a custom field. You want to add your new field to the page layouts in all your orgs. This type of configuration information is stored in metadata types and components in your org.
You can create a script that uses Apex Metadata API to add your new field to the page layouts in all your orgs directly from Apex. The metadata in the orgs is updated behind the scenes, so that your admins don’t have to make manual changes in each org.
Apex Metadata API also enables you to build custom setup experiences for your features. For example, let’s say you’ve created custom metadata types to support a new feature. The records of your custom metadata types must be configured differently for different countries. You can use Apex Metadata API to build a setup wizard that guides admins through a series of steps to configure the records. This automation saves your admins from having to make manual changes in the Setup UI.
Work with Metadata Directly from Apex
To work with metadata from within Apex code, use classes in the Metadata namespace. You can access two top-level metadata types: page layouts and records of custom metadata types, which gives you the ability to handle much of the customization and configuration for your org.
So, what kinds of things can you do with the Apex Metadata API? You can retrieve metadata from an org synchronously. Then you can inspect this metadata and update it, and you can also create metadata. It’s easy to deploy your updated metadata to your orgs, using asynchronous deployment. To be notified when your deployment completes, you can implement a callback.
Don't forget to check out: How to Update the Values of a Custom Picklist Field using Metadata API?
We can deploy this new record to an org directly from Apex
Metadata.CustomMetadata customMetadata = new Metadata.CustomMetadata(); customMetadata.fullName = 'MyNamespace__MetadataTypeName.MetadataRecordName'; Metadata.CustomMetadataValue customField = new Metadata.CustomMetadataValue(); customField.field = 'customField__c'; customField.value = 'New value'; customMetadata.values.add(customField);
Although there’s a lot you can do with Apex Metadata API, there are some limitations to keep in mind.
- In the current release, we support only two metadata types: page layouts and the records of custom metadata types.
- Reading, creating, and updating metadata are supported, but deleting metadata is not supported.
- We don’t have an API that lets you track the status of a deployment. However, you can set up a callback that is called when the deployment completes.
What About Security?
Metadata is powerful stuff. So, perhaps you’re concerned about security. Don’t worry! Trust is our number one value at Salesforce, and Apex Metadata API is built to be a trusted interface. Installed packages must be Apex-certified, or the subscriber org must turn on a setting to allow an Apex metadata deployment. You can track the namespace that initiated deployment in the Setup audit trail.
Check out another amazing blog by Rupesh here: What is the Apex Testing Framework in Salesforce in 2023?
A Note for ISVs
Although the examples in this module focus on enterprises, Apex Metadata API can also be useful if you’re a developer at an ISV. Creating setup UIs specific to your apps and automating configuration changes can provide a boost to your business. With Apex Metadata API you can:
- Save money for you and your customers by making the setup experience faster and easier for non-experts.
- Eliminate some setup steps entirely by automating them.
- Provide admins the capability to change configuration on the fly by giving them a tool they can use without professional services expertise.
- Increase product adoption by lowering the barrier for customers to try your app.
- Protect your intellectual property. The ability to update protected metadata in your app means you can hide more of your configuration from customers.
- Eliminate reliance on remote site settings, reducing the complexity of your code and simplifying customers’ setup.
Responses