Ejemplo n.º 1
0
        public void PerformImportAction(string importSchemaFilePath, int maxThreads, bool jsonFormat, Capgemini.DataMigration.Core.ILogger currentLogger, IEntityRepositoryService entityRepositoryService, CrmImportConfig currentImportConfig, CancellationTokenSource tokenSource)
        {
            try
            {
                if (maxThreads > 1)
                {
                    currentLogger.LogInfo($"Starting MultiThreaded Processing, using {maxThreads} threads");
                    var repos       = new List <IEntityRepository>();
                    int threadCount = maxThreads;

                    while (threadCount > 0)
                    {
                        threadCount--;
                        repos.Add(entityRepositoryService.InstantiateEntityRepository(true));
                    }

                    var fileExporter = new CrmFileDataImporter(currentLogger, repos, currentImportConfig, tokenSource.Token);
                    fileExporter.MigrateData();
                }
                else
                {
                    currentLogger.LogInfo("Starting Single Threaded processing, you must set up max threads to more than 1");
                    var entityRepo = entityRepositoryService.InstantiateEntityRepository(false);

                    if (jsonFormat)
                    {
                        var fileExporter = new CrmFileDataImporter(currentLogger, entityRepo, currentImportConfig, tokenSource.Token);
                        fileExporter.MigrateData();
                    }
                    else
                    {
                        var schema       = CrmSchemaConfiguration.ReadFromFile(importSchemaFilePath);
                        var fileExporter = new CrmFileDataImporterCsv(currentLogger, entityRepo, currentImportConfig, schema, tokenSource.Token);
                        fileExporter.MigrateData();
                    }
                }
            }
            catch (Exception ex)
            {
                currentLogger.LogError($"Critical import error, processing stopped: {ex.Message}");
                throw;
            }
        }