Skip to main content

Migrating InCountry Metadata between Salesforce Orgs

You can migrate metadata and configuration of the InCountry Data Residency for Salesforce package from a source Salesforce org to a target Salesforce org.

Retrieving metadata and configuration from the source Salesforce org​

Metadata of FlexiPages​

You can retrieve metadata of the FlexiPages that reference InCountry components.

To retrieve metadata of all FlexiPages, use the following command: sf project retrieve start --metadata FlexiPage or specify names of FlexiPages: sf project retrieve start --metadata FlexiPage:<Component Name>

Metadata of feature flags​

You can retrieve metadata of feature flags and their actual values.

To retrieve metadata of all feature flags and their values, use the following command: sf project retrieve start --metadata CustomMetadata or specify the feature flag name: sf project retrieve start --metadata CustomMetadata:<Flag or Value Name>

Metadata of data regulation policies​

You can retrieve values of a specific data regulation policy. The output will be stored in the testIncountry1__Object_relationship__c.json file in the current directory.

sf data export tree
--query "SELECT testInCountry1__Behavior__c,
testInCountry1__Country__c,
testInCountry1__Country_field__c,
testInCountry1__CountryFieldValue__c,
testInCountry1__Criteria__c,
testInCountry1__Object_name__c,
testInCountry1__Type__c,
FROM testInCountry1__Object_relationship__c"

Metadata of regulated fields​

You can retrieve configuration of regulated fields. The output will be stored in the testIncountry1__Object_relationship_fields__c.json file in the current directory.

sf data export tree
--query "SELECT Name, testIncountry1__Country__c, testIncountry1__Field_name__c,
testIncountry1__FixedValue__c, testIncountry1__Formula__c,
testIncountry1__HashFunction__c, testIncountry1__IsCompound__c,
testIncountry1__IsCountryField__c, testIncountry1__IsLookup__c,
testIncountry1__key__c, testIncountry1__LookupObjectApiName__c,
testIncountry1__LookupRelationshipName__c,
testIncountry1__LookupRequiredToSelectFields__c, testIncountry1__NeedHash__c,
testIncountry1__Object_name__c, testIncountry1__RawTokenizationFormula__c,
testIncountry1__Reference_field__c, testIncountry1__Reference_order__c,
testIncountry1__SearchKey__c, testIncountry1__TokenizationFormula__c,
testIncountry1__Validation_strategy__c
FROM testInCountry1__Object_relationship_fields__c"

Metadata of InCountry reports​

You can retrieve metadata of InCountry reports by using the following SOQL queries with sf data export tree or an equivalent command. Each output will be stored in a separate .json or .csv file.

// Retrieve Folders
SELECT testIncountry1__FolderId__c, Name, testIncountry1__isPrivate__c, testIncountry1__Label__c,
testIncountry1__Share_Request__c
FROM testIncountry1__Folder__c

// Retrieve Reports
SELECT Name, testIncountry1__Label__c, testIncountry1__Description__c, testIncountry1__FolderId__c,
testIncountry1__PrimaryObject__c
FROM testIncountry1__Report__c

// Retrieve Report Groups
SELECT Name, testIncountry1__Field__c, testIncountry1__ReportId__c
FROM testIncountry1__Group__c

// Retrieve Report Filters
SELECT Name, testIncountry1__Logic__c, testIncountry1__ReportId__c, testIncountry1__Scope__c
FROM testIncountry1__Filter__c

// Retrieve Report Filter Items
SELECT Name, testIncountry1__Field__c, testIncountry1__FilterId__c, testIncountry1__Operator__c, testIncountry1__Position__c, testIncountry1__Value__c
FROM testIncountry1__FilterItem__c

// Retrieve Report Columns
SELECT Name, testIncountry1__Field__c, testIncountry1__Order__c, testIncountry1__ReportId__c, testIncountry1__SortDirection__c, testIncountry1__SortOrder__c
FROM testIncountry1__Column__c

Metadata of list views​

You can retrieve metadata of list view configurations by using the following SOQL queries with sf data export or an equivalent command. Each output will be stored in a separate .json or .csv file.

// Retrieve List View Filters
SELECT Name, testIncountry1__Context__c, testIncountry1__Label__c,
testIncountry1__Logic__c, testIncountry1__Queue__c, testIncountry1__Scope__c
FROM testIncountry1__InCountryFilter__c

// Retrieve List View Filter Items
SELECT Name, testIncountry1__DataType__c, testIncountry1__FieldName__c,
testIncountry1__FieldValue__c, testIncountry1__FilterId__c,
testIncountry1__Label__c, testIncountry1__Operator__c
FROM testIncountry1__InCountryFilterItem__c

Resident functions​

You can retrieve metadata of resident functions by using the following command:

sf data export tree
--query "SELECT Name, testIncountry1__Active__c, testIncountry1__AdditionalParameters__c,
testIncountry1__ApexHandler__c, testIncountry1__ObjectApiName__c,
testIncountry1__OperationType__c, testIncountry1__ServerlessName__c
FROM testIncountry1__InCountry_Trigger__c"

InCountry frontend validation​

You can retrieve metadata of InCountry frontend validations by using the following command:

sf data export tree
--query "SELECT Name, testIncountry1__Active__c, testIncountry1__Description__c,
testIncountry1__ErrorConditionFormula__c, testIncountry1__ErrorLocation__c,
testIncountry1__ErrorLocationField__c, testIncountry1__ErrorMessage__c,
testIncountry1__ObjectApiName__c, testIncountry1__RuleName__c,
testIncountry1__SalesforceRuleId__c
FROM testIncountry1__ValidationRule__c"

Assignments of permission sets​

You can retrieve permission set assignments by using the following command:

sf data export tree
--query "SELECT Id, AssigneeId, PermissionSetId
FROM PermissionSetAssignment
WHERE PermissionSet.Name LIKE 'InCountry%'"

Installing the package on the target organization​

You can use the following Salesforce CLI command to install the specified package version id: sf package install --package <version id>

Pushing metadata and configuration to the target Salesforce org​

FlexiPages​

Use the following commands to deploy the FlexiPages metadata:

1. metadata of all FlexiPages: sf project deploy start --metadata FlexiPage 2. specific FlexiPages (reference specific names): sf project deploy start --metadata FlexiPage FlexiPage:<Component Name>

Feature flags​

Use the following commands to deploy feature flags and their values:

1. all feature flags and their values: sf project deploy start --metadata CustomMetadata 2. specific feature flags (reference specific names): sf project deploy start --metadata CustomMetadata:<Flag or Value Name>

Data regulation policies and regulated fields​

Use the following command to deploy data regulation policies and regulated fields: sf data import tree --files testIncountry1__Object_relationship__c.json, testIncountry1__Object_relationship_fields__c.json

InCountry reports​

Use the sf data import tree command to deploy InCountry reports with the following objects:

testIncountry1__Folder__c
testIncountry1__Report__c
testIncountry1__Group__c
testIncountry1__Filter__c
testIncountry1__FilterItem__c
testIncountry1__Column__c

List views​

Use the sf data import tree command to deploy list views and their configuration with the following objects:

testIncountry1__InCountryFilter__c
testIncountry1__InCountryFilterItem__c

Resident functions​

Use the following command to deploy resident functions and their configuration: sf data import tree --files testIncountry1__InCountry_Trigger__c.json

InCountry frontend validations​

Use the following command to deploy frontend validations and their configuration: sf data import tree --files testIncountry1__ValidationRule__c.json

Permission sets​

Use the following command to deploy permission sets and their configuration: sf data import tree --files PermissionSetAssignments.json

[Optional] Migrating authentication details​

note

We do not recommend to migrate the authentication information from a source Salesforce org to a target org, but this is possible as well.

Remote Site settings​

To migrate the Remote Site settings, use the following commands:

/*****************************
/ Retrieve Settings /
/****************************/
// For all Remote Site Settings
sf project retrieve start --metadata RemoteSiteSetting

// For specific Remote Site Settings
sf project retrieve start --metadata RemoteSiteSetting:<Setting Name>


/*****************************
/ Deploy Settings /
/****************************/
// For all Remote Site Settings
sf project deploy start --metadata RemoteSiteSetting

// For specific Remote Site Settings
sf project deploy start --metadata RemoteSiteSetting:<Setting Name>

Auth Providers​

To migrate Auth Providers, use REST API to retrieve and deploy them:

{
"DeveloperName": "Auth_Provider",
"FriendlyName": "Auth Provider",
"AuthorizeUrl": "<Hydra URL>",
"ConsumerKey": "<Consumer Key>",
"ConsumerSecret": "<Consumer Secrets>",
"OptionsIncludeOrgIdInId": "true",
"ProviderType": "Custom",
"TokenUrl": "<Token URL>",
"CustomMetadataTypeRecord": "<MTD>",
"DefaultScopes": "<Scope>",
"ExecutionUserId": "<User Id>",
"PluginId": "<Apex Class Id>"
}

Named Credentials​

To retrieve and deploy named credentials, the XML file should have the following structure:

<?xml version="1.0" encoding="UTF-8"?>
<NamedCredential xmlns="http://soap.sforce.com/2006/04/metadata">
<allowMergeFieldsInBody>false</allowMergeFieldsInBody>
<allowMergeFieldsInHeader>false</allowMergeFieldsInHeader>
<authProvider>Auth_Provider</authProvider>
<endpoint><InCountry Rest API endpoint></endpoint>
<generateAuthorizationHeader>true</generateAuthorizationHeader>
<label>Creds_Demo</label>
<principalType>NamedUser</principalType>
<protocol>Oauth</protocol>
</NamedCredential>