-
Notifications
You must be signed in to change notification settings - Fork 10
Setup
Kevin Lee edited this page Apr 9, 2019
·
7 revisions
-
Powershell 4.0+
The Powershell scripts that are executed as part of these extensions require Powershell 4.0 or later. -
Solution and Class Library Project created in Visual Studio
Solution and Project can be named anything, but a suggested name for project is [Namespace].CrmSource.csproj.
- Microsoft.Xrm.Data.PowerShell - Microsoft.Xrm.Data.PowerShell GitHub project - PowerShell wrapper for CRM SDK CrmServiceClient class.
- Microsoft.CrmSdk.CoreTools - Microsoft.CrmSdk.CoreTools Nuget package - Offical Microsoft CRM SDK core tools
- CreateNewNuGetPackageFromProjectAfterEachBuild - CreateNewNuGetPackageFromProjectAfterEachBuild Nuget package - helper package to build nuget packages
Clone the Git Repository
Open example project (Capgemini.Xrm.Datamigration.Examples) and edit configuration file (App.config):
<applicationSettings>
<Capgemini.Xrm.Datamigration.Examples.Properties.Settings>
<setting name="CrmExportConnectionString" serializeAs="String">
<value>Url = https://sourcerepo.dynamics.com; Username=xxxx; Password=xxxx; AuthType=Office365; RequireNewInstance=True;</value>
</setting>
<setting name="CrmImportConnectionString" serializeAs="String">
<value>Url = https://targetrepo.crm4.dynamics.com; Username=xxx; Password=xxxx; AuthType=Office365; RequireNewInstance=True;</value>
</setting>
</Capgemini.Xrm.Datamigration.Examples.Properties.Settings>
</applicationSettings>
Set up some contacts example in the source CRM Instance
Run the console application and follow messages
In the bin folder there will be output folder and files with exported data created:
In the target CRM instance you can check if all contacts are created.
Create a new console app and add Capgemini.Xrm.DataMigration Nuget
Xrm DataMigration Engine classes are available to be used in any custom scenario eg.
Export Example
static void ExportData(string connectionString, string schemaPath, string exportFolderPath)
{
if (!Directory.Exists(exportFolderPath))
Directory.CreateDirectory(exportFolderPath);
var tokenSource = new CancellationTokenSource();
var serviceClient = new CrmServiceClient(connectionString);
var entityRepo = new EntityRepository(serviceClient, new ServiceRetryExecutor());
var logger = new ConsoleLogger();
var exportConfig = new CrmExporterConfig()
{
BatchSize = 1000,
PageSize = 500,
FilePrefix = "EX0.1",
JsonFolderPath = exportFolderPath,
OneEntityPerBatch = true,
SeperateFilesPerEntity = true,
TopCount = 10000,
CrmMigrationToolSchemaPaths = new List<string>() {schemaPath}
};
// Json Export
var fileExporterJson = new CrmFileDataExporter(logger, entityRepo, exportConfig, tokenSource.Token);
fileExporterJson.MigrateData();
// Csv Export
var schema = CrmSchemaConfiguration.ReadFromFile(schemaPath);
var fileExporterCsv = new CrmFileDataExporterCsv(logger, entityRepo, exportConfig, tokenSource.Token, schema);
fileExporterCsv.MigrateData();
}
Import Example
public static void ImportData(string connectionString, string schemaPath, string exportFolderPath)
{
var tokenSource = new CancellationTokenSource();
var serviceClient = new CrmServiceClient(connectionString);
var entityRepo = new EntityRepository(serviceClient, new ServiceRetryExecutor());
var logger = new ConsoleLogger();
var importConfig = new CrmImportConfig()
{
FilePrefix = "EX0.1",
JsonFolderPath = exportFolderPath,
SaveBatchSize = 20
};
// Json Import
var fileImporterJson = new CrmFileDataImporter(logger, entityRepo, importConfig, tokenSource.Token);
fileImporterJson.MigrateData();
//Csv Import
var schema = CrmSchemaConfiguration.ReadFromFile(schemaPath);
var fileImporterCsv = new CrmFileDataImporterCsv(logger, entityRepo, importConfig, schema, tokenSource.Token);
fileImporterCsv.MigrateData();
}