Simplifying Salesforce Metadata XML Files for Component Retrieval and Deployment
Introduction
Effective management of Salesforce projects requires the right set of tools, and one such tool that can significantly enhance your workflow is the "Salesforce Package.xml Generator Extension for VS Code." This extension, developed by Vignesh, has earned its place as one of the most widely downloaded extensions in the Salesforce ecosystem, known for its remarkable utility. The extension provides an intuitive interface for creating Package.xml files, a critical component in Salesforce development, especially when dealing with sandboxes or Developer Edition orgs. It brings to mind the familiar "Add/Remove Metadata Components" feature found in the Eclipse Force.com IDE.Before you embark on using the Salesforce Package.xml Generator Extension for VS Code, make sure you have the following prerequisites in place: Salesforce Extensions for Visual Studio Code Visual Studio Code version 1.26 or later
Salesforce Package.xml Generator Extension for VS Code
How to use
Properties
- Package.XML Translation CustomObjectTranslation,CustomField And Custom Object Metadata When you retrieve translations in Salesforce using the Metadata API, the translations are fetched only for the components explicitly mentioned in the package.xml file. If your package.xml includes a specific custom field or page layout for an object, the translations for those particular components will be retrieved. Other translations for different parts of the same object or for other objects won't be fetched unless they are specified in the package.xml file.
- Package.XML For Report And Dashboard 1. No Spaces in Folder Names: Spaces in folder names should be omitted in the package.xml file. For example, if the report or dashboard resides in a folder named "HHN Reports" and the report or dashboard name is "HHN Resource Requests," you should remove spaces when specifying the folder and component names.
- Package.XML Approval Process And It's Dependant component
- To Retrive Or Deploy Field Level Access We Have To Use Package.XML
- To Retrive Or Deploy Record Type Visibility And Layout Assingment Use This Package.XML
- Metadata Retrieval XML StandardValueSet,GlobalValueSet And Custom Picklist
- Package.XML structure that includes tabs and profile for tab visibility
- Package.XML structure With All Metadata Component
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Sample_Object__c</members>
<name>CustomObjectTranslation</name>
</types>
<types>
<members>Sample_Object__c.Sample_Field__c</members>
<name>CustomField</name>
</types>
<version>58.0</version>
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Sample_Object__c</members>
<name>CustomObjectTranslation</name>
</types>
<types>
<members>Sample_Object__c</members>
<name>CustomObject</name>
</types>
<version>58.0</version>
</Package>
2. Using DeveloperName: Utilize the DeveloperName attribute of the report or dashboard to retrieve it in the package.xml. This means using the unique DeveloperName instead of the display name to ensure a successful retrieval. Here's an example package.xml to retrieve a report or dashboard with these considerations:
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<!-- For Reports -->
<types>
<members>Sample_Folder/Sample_Report</members>
<name>Report</name>
</types>
<!-- For Dashboards -->
<types>
<members>Sample_Folder/Sample_Dashboard</members>
<name>Dashboard</name>
</types>
<version>58.0</version>
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<!-- For Approval Processes -->
<types>
<members>Approval_Process_API_Name</members>
<name>ApprovalProcess</name>
</types>
<types>
<members>Custom_Object__c.FieldUpdate_API_Name</members>
<name>WorkflowFieldUpdate</name>
</types>
<types>
<members>Custom_Object__c.EmailAlert_API_Name</members>
<name>WorkflowAlert</name>
</types>
<version>58.0</version>
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>CustomFieldName</members> <!-- Replace 'CustomFieldName' with the actual name of the CustomField -->
<name>CustomField</name>
</types>
<types>
<members>ProfileName</members> <!-- Replace 'ProfileName' with the actual name of the profile -->
<name>Profile</name>
</types>
<version>58.0</version> <!-- Use the API version of your Salesforce org -->
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Object_API_Name</members> <!-- Replace 'Object_API_Name' with the API name of the object -->
<name>RecordType</name>
</types>
<types>
<members>Object_API_Name.Pagelayout_Name</members> <!-- Replace 'Object_API_Name' with the API name of the object and 'Pagelayout_Name' with the name of the page layout -->
<name>Layout</name>
</types>
<types>
<members>ProfileName</members> <!-- Replace 'ProfileName' with the actual name of the profile -->
<name>Profile</name>
</types>
<version>58.0</version> <!-- Use the API version of your Salesforce org -->
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>ObjectName.CustomFieldName</members> <!-- Replace 'ObjectName' with the API name of the object and 'CustomFieldName' with the API name of the field -->
<name>CustomField</name>
</types>
<types>
<members>StandardValueSetName</members> <!-- Replace 'StandardValueSetName' with the name of the Standard Value Set -->
<name>StandardValueSet</name>
</types>
<types>
<members>GlobalValueSetName</members> <!-- Replace 'GlobalValueSetName' with the name of the Global Value Set -->
<name>GlobalValueSet</name>
</types>
<version>58.0</version> <!-- Use the API version of your Salesforce org -->
</Package>
Package.XML
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Custom_Tab_Name</members> <!-- Replace 'Custom_Tab_Name' with the name of the custom tab -->
<name>CustomTab</name>
</types>
<types>
<members>ProfileName</members> <!-- Replace 'ProfileName' with the actual name of the profile -->
<name>Profile</name>
</types>
<version>58.0</version> <!-- Use the API version of your Salesforce org -->
</Package>
TRIGGER
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>ActionLinkGroupTemplate</name>
</types>
<types>
<members>*</members>
<name>ApexClass</name>
</types>
<types>
<members>*</members>
<name>ApexComponent</name>
</types>
<types>
<members>*</members>
<name>ApexPage</name>
</types>
<types>
<members>*</members>
<name>ApexTrigger</name>
</types>
<types>
<members>*</members>
<name>AppMenu</name>
</types>
<types>
<members>*</members>
<name>ApprovalProcess</name>
</types>
<types>
<members>*</members>
<name>AssignmentRules</name>
</types>
<types>
<members>*</members>
<name>AuraDefinitionBundle</name>
</types>
<types>
<members>*</members>
<name>AuthProvider</name>
</types>
<types>
<members>*</members>
<name>AutoResponseRules</name>
</types>
<types>
<members>*</members>
<name>BrandingSet</name>
</types>
<types>
<members>*</members>
<name>CallCenter</name>
</types>
<types>
<members>*</members>
<name>Certificate</name>
</types>
<types>
<members>*</members>
<name>CleanDataService</name>
</types>
<types>
<members>*</members>
<name>Community</name>
</types>
<types>
<members>*</members>
<name>ConnectedApp</name>
</types>
<types>
<members>*</members>
<name>ContentAsset</name>
</types>
<types>
<members>*</members>
<name>CorsWhitelistOrigin</name>
</types>
<types>
<members>*</members>
<name>CustomApplication</name>
</types>
<types>
<members>*</members>
<name>CustomApplicationComponent</name>
</types>
<types>
<members>*</members>
<name>CustomFeedFilter</name>
</types>
<types>
<members>*</members>
<name>CustomHelpMenuSection</name>
</types>
<types>
<members>*</members>
<name>CustomLabels</name>
</types>
<types>
<members>*</members>
<name>CustomMetadata</name>
</types>
<types>
<members>*</members>
<name>CustomObject</name>
</types>
<types>
<members>*</members>
<name>CustomObjectTranslation</name>
</types>
<types>
<members>*</members>
<name>CustomPageWebLink</name>
</types>
<types>
<members>*</members>
<name>CustomPermission</name>
</types>
<types>
<members>*</members>
<name>CustomSite</name>
</types>
<types>
<members>*</members>
<name>CustomTab</name>
</types>
<types>
<members>*</members>
<name>Dashboard</name>
</types>
<types>
<members>*</members>
<name>DataCategoryGroup</name>
</types>
<types>
<members>*</members>
<name>DelegateGroup</name>
</types>
<types>
<members>*</members>
<name>Document</name>
</types>
<types>
<members>*</members>
<name>DuplicateRule</name>
</types>
<types>
<members>*</members>
<name>EclairGeoData</name>
</types>
<types>
<members>*</members>
<name>EmailServicesFunction</name>
</types>
<types>
<members>*</members>
<name>EmailTemplate</name>
</types>
<types>
<members>*</members>
<name>EscalationRules</name>
</types>
<types>
<members>*</members>
<name>ExternalDataSource</name>
</types>
<types>
<members>*</members>
<name>ExternalServiceRegistration</name>
</types>
<types>
<members>*</members>
<name>FlexiPage</name>
</types>
<types>
<members>*</members>
<name>Flow</name>
</types>
<types>
<members>*</members>
<name>FlowCategory</name>
</types>
<types>
<members>*</members>
<name>FlowDefinition</name>
</types>
<types>
<members>*</members>
<name>GlobalValueSet</name>
</types>
<types>
<members>*</members>
<name>GlobalValueSetTranslation</name>
</types>
<types>
<members>*</members>
<name>HomePageComponent</name>
</types>
<types>
<members>*</members>
<name>HomePageLayout</name>
</types>
<types>
<members>*</members>
<name>InstalledPackage</name>
</types>
<types>
<members>*</members>
<name>Layout</name>
</types>
<types>
<members>*</members>
<name>Letterhead</name>
</types>
<types>
<members>*</members>
<name>LightningBolt</name>
</types>
<types>
<members>*</members>
<name>LightningComponentBundle</name>
</types>
<types>
<members>*</members>
<name>LightningExperienceTheme</name>
</types>
<types>
<members>*</members>
<name>MatchingRules</name>
</types>
<types>
<members>*</members>
<name>NamedCredential</name>
</types>
<types>
<members>*</members>
<name>NetworkBranding</name>
</types>
<types>
<members>*</members>
<name>PathAssistant</name>
</types>
<types>
<members>*</members>
<name>PermissionSet</name>
</types>
<types>
<members>*</members>
<name>PlatformCachePartition</name>
</types>
<types>
<members>*</members>
<name>PostTemplate</name>
</types>
<types>
<members>*</members>
<name>Profile</name>
</types>
<types>
<members>*</members>
<name>ProfileSessionSetting</name>
</types>
<types>
<members>*</members>
<name>Queue</name>
</types>
<types>
<members>*</members>
<name>QuickAction</name>
</types>
<types>
<members>*</members>
<name>RecommendationStrategy</name>
</types>
<types>
<members>*</members>
<name>RecordActionDeployment</name>
</types>
<types>
<members>*</members>
<name>RemoteSiteSetting</name>
</types>
<types>
<members>*</members>
<name>ReportType</name>
</types>
<types>
<members>*</members>
<name>Role</name>
</types>
<types>
<members>*</members>
<name>SamlSsoConfig</name>
</types>
<types>
<members>*</members>
<name>Scontrol</name>
</types>
<types>
<members>*</members>
<name>Settings</name>
</types>
<types>
<members>*</members>
<name>SharingRules</name>
</types>
<types>
<members>*</members>
<name>SiteDotCom</name>
</types>
<types>
<members>*</members>
<name>StandardValueSetTranslation</name>
</types>
<types>
<members>*</members>
<name>StaticResource</name>
</types>
<types>
<members>*</members>
<name>SynonymDictionary</name>
</types>
<types>
<members>*</members>
<name>TopicsForObjects</name>
</types>
<types>
<members>*</members>
<name>TransactionSecurityPolicy</name>
</types>
<types>
<members>*</members>
<name>Workflow</name>
</types>
<version>58.0</version>
</Package>