From eb43cd81ec828966421bd9856b947da37d9b3f1a Mon Sep 17 00:00:00 2001 From: dotnetprog <24593889+dotnetprog@users.noreply.github.com> Date: Tue, 22 Jul 2025 06:53:42 -0400 Subject: [PATCH 1/2] Push somes fixes --- .../CommandProcessorHostingService.cs | 14 +++++- .../Import/Commands/ImportCommands.cs | 45 +++++++++++-------- .../appsettings.json | 3 +- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/CommandProcessorHostingService.cs b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/CommandProcessorHostingService.cs index 77ea3d0..06331a1 100644 --- a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/CommandProcessorHostingService.cs +++ b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/CommandProcessorHostingService.cs @@ -40,7 +40,19 @@ where Attribute.IsDefined(type, typeof(CommandVerbAttribute)) && throw new InvalidOperationException($"No command found for verb '{_options.CommandVerb}'"); } var command = ActivatorUtilities.CreateInstance(scope.ServiceProvider, mathingVerbCommandType) as ICommand; - await command.Execute(); + if (command == null) + { + throw new InvalidOperationException($"Command type '{mathingVerbCommandType.FullName}' could not be instantiated."); + } + try + { + await command.Execute(); + } + catch + { + Environment.ExitCode = -100; + throw; + } } diff --git a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/Commands/ImportCommands.cs b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/Commands/ImportCommands.cs index 204f93c..82ac4e2 100644 --- a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/Commands/ImportCommands.cs +++ b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/Commands/ImportCommands.cs @@ -26,13 +26,11 @@ public ImportCommands(ILogger logger, _options = options.Value; } - public async Task Execute() => await Import(_options.schema, _options.data); + public Task Execute() => Import(_options.schema, _options.data); private async Task Import(string schemafilepath, string datafilepath) { - - var ImportQueue = new Queue(); var schema = await _importDataProvider.ReadSchemaFromFile(schemafilepath); var importdata = await _importDataProvider.ReadFromFile(datafilepath); @@ -48,19 +46,19 @@ private async Task Import(string schemafilepath, string datafilepath) throw new Exception("Provided Schema was not valid."); } _logger.LogInformation("Schema validation succeeded."); + var ImportQueue = CreateQueue(schema); - foreach (var schemaEntity in schema.Entity) + + var taskResults = await ProcessQueue(ImportQueue, importdata); + if (taskResults.Any(r => r == TaskResult.Failed)) { - ImportQueue.Enqueue(new ImportDataTask { EntitySchema = schemaEntity }); - if (schemaEntity.Relationships.Relationship.Any()) - { - foreach (var relationshipSchema in schemaEntity.Relationships.Relationship) - { - ImportQueue.Enqueue(new ImportDataTask { RelationshipSchema = relationshipSchema, SouceEntityName = schemaEntity.Name }); - } - } + _logger.LogError("Import process failed."); + throw new Exception("Import process failed."); } + } + private async Task> ProcessQueue(Queue ImportQueue, Entities importdata) + { var taskResults = new List(); while (ImportQueue.Count > 0) { @@ -78,7 +76,7 @@ private async Task Import(string schemafilepath, string datafilepath) } if (importTask.RelationshipSchema != null && ImportQueue.Any(t => t.EntitySchema != null && - t.EntitySchema.Name == importTask.RelationshipSchema.M2mTargetEntity || t.EntitySchema.Name == importTask.SouceEntityName)) + (t.EntitySchema.Name == importTask.RelationshipSchema.M2mTargetEntity || t.EntitySchema.Name == importTask.SouceEntityName))) { ImportQueue.Enqueue(importTask); continue; @@ -90,14 +88,23 @@ private async Task Import(string schemafilepath, string datafilepath) } - if (taskResults.Any(r => r == TaskResult.Failed)) + return taskResults; + } + private static Queue CreateQueue(ImportSchema schema) + { + var ImportQueue = new Queue(); + foreach (var schemaEntity in schema.Entity) { - _logger.LogError("Import process failed."); - throw new Exception("Import process failed."); + ImportQueue.Enqueue(new ImportDataTask { EntitySchema = schemaEntity }); + if (schemaEntity.Relationships.Relationship.Any()) + { + foreach (var relationshipSchema in schemaEntity.Relationships.Relationship) + { + ImportQueue.Enqueue(new ImportDataTask { RelationshipSchema = relationshipSchema, SouceEntityName = schemaEntity.Name }); + } + } } - - - + return ImportQueue; } } diff --git a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/appsettings.json b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/appsettings.json index 90d0ab1..537be9f 100644 --- a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/appsettings.json +++ b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/appsettings.json @@ -1,7 +1,8 @@ { "Logging": { "LogLevel": { - "Default": "Information" + "Default": "Information", + "Dataverse.ConfigurationMigrationTool.Console.Services.Dataverse.SdkDataverseServiceFactory": "Warning" } }, "Dataverse": { From 5dcfece930324ea26c9430a80a7ab8532a211276 Mon Sep 17 00:00:00 2001 From: dotnetprog <24593889+dotnetprog@users.noreply.github.com> Date: Tue, 22 Jul 2025 07:01:40 -0400 Subject: [PATCH 2/2] Push somes fixes --- .../Import/ValueConverters/DataverseValueConverterTests.cs | 2 +- .../Features/Import/ValueConverters/DataverseValueConverter.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Dataverse.ConfigurationMigrationTool/Console.Tests/Features/Import/ValueConverters/DataverseValueConverterTests.cs b/src/Dataverse.ConfigurationMigrationTool/Console.Tests/Features/Import/ValueConverters/DataverseValueConverterTests.cs index 5d067f3..938a96b 100644 --- a/src/Dataverse.ConfigurationMigrationTool/Console.Tests/Features/Import/ValueConverters/DataverseValueConverterTests.cs +++ b/src/Dataverse.ConfigurationMigrationTool/Console.Tests/Features/Import/ValueConverters/DataverseValueConverterTests.cs @@ -93,7 +93,7 @@ public void GivenAnUnsupportedAttributeMetadata_WhenConverted_ThenItShouldThrowP { //Arrange var field = new Field() { Name = "test", Value = "125462" }; - var amd = new MemoAttributeMetadata(); + var amd = new ImageAttributeMetadata(); //Act Action act = () => converter.Convert(amd, field); //Assert diff --git a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/ValueConverters/DataverseValueConverter.cs b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/ValueConverters/DataverseValueConverter.cs index e1d2e23..d326f5e 100644 --- a/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/ValueConverters/DataverseValueConverter.cs +++ b/src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/ValueConverters/DataverseValueConverter.cs @@ -24,6 +24,7 @@ public object Convert(AttributeMetadata attributeMetadata, Field field) switch (attributeMetadata.AttributeType.Value) { case AttributeTypeCode.String: + case AttributeTypeCode.Memo: return _mainConverter.Convert(value); case AttributeTypeCode.Picklist: case AttributeTypeCode.State: