Skip to content

Commit 6aef66f

Browse files
authored
Feature/add ci pipeline (#2)
* init ci pipeline * fix typo * fix typo again * fix code coverage requirements * Test fix * Test fix * Test fix * Test fix * Use Coverlet instead * beautify mapper * add logs
1 parent 78037a5 commit 6aef66f

File tree

3 files changed

+32
-48
lines changed

3 files changed

+32
-48
lines changed

src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/ImportTaskProcessorService.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ await ImportRelationships(entityMD, task, entityToImport) :
5353

5454
private async Task<TaskResult> ImportRelationships(EntityMetadata entity, ImportDataTask task, EntityImport entityImport)
5555
{
56+
this.logger.LogInformation("Importing relationship : {relationshipname} | for entity source : {entityname}", task.RelationshipSchema.Name, entityImport.Name);
5657
var relMD = entity.ManyToManyRelationships.FirstOrDefault(m => m.IntersectEntityName == task.RelationshipSchema.Name);
5758
if (relMD == null) return TaskResult.Failed;
5859

@@ -95,15 +96,16 @@ private async Task<TaskResult> ImportRelationships(EntityMetadata entity, Import
9596
}
9697
private async Task<TaskResult> ImportRecords(EntityMetadata entity, ImportDataTask task, EntityImport entityImport)
9798
{
98-
99+
logger.LogInformation("Importing {entityname} records", entityImport.Name);
99100
var recordsWithNoSelfDependancies = entityImport.Records.Record.Where(r =>
100101
!r.Field.Any(f => f.Lookupentity == entityImport.Name &&
101102
entityImport.Records.Record.Any(r2 => r2.Id != r.Id && r2.Id.ToString() == f.Value))).Select(r => BuildUpsertRequest(entity, entityImport, r)).ToList();
102103
var recordsWithSelfDependancies = entityImport.Records.Record.Where(r =>
103104
r.Field.Any(f => f.Lookupentity == entityImport.Name &&
104105
entityImport.Records.Record.Any(r2 => r2.Id != r.Id && r2.Id.ToString() == f.Value))).ToList();
105106

106-
107+
logger.LogInformation("records with no self dependancies: {count}", recordsWithNoSelfDependancies.Count);
108+
logger.LogInformation("records with self dependancies: {count}", recordsWithSelfDependancies.Count);
107109
//See if upsert request keep ids
108110

109111
//implement parallelism and batching
@@ -172,6 +174,12 @@ private async Task<IEnumerable<OrganizationResponseFaultedResult>> ProcessDepend
172174
}
173175

174176
}
177+
var maxretries = retries.Where(kv => kv.Value >= MAX_RETRIES).Select(kv => kv.Key).ToList();
178+
if (maxretries.Any())
179+
{
180+
logger.LogWarning("The following records ({count}) were not processed due to circular dependencies: {ids}", maxretries.Count, string.Join(", ", maxretries));
181+
}
182+
175183
return results;
176184

177185
}

src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/Features/Import/Mappers/FieldSchemaToAttributeTypeMapper.cs

Lines changed: 20 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,27 @@
22
using Dataverse.ConfigurationMigrationTool.Console.Features.Shared;
33
using Microsoft.Xrm.Sdk.Metadata;
44

5-
namespace Dataverse.ConfigurationMigrationTool.Console.Features.Import.Mappers
5+
namespace Dataverse.ConfigurationMigrationTool.Console.Features.Import.Mappers;
6+
7+
public class FieldSchemaToAttributeTypeMapper : IMapper<FieldSchema, AttributeTypeCode?>
68
{
7-
public class FieldSchemaToAttributeTypeMapper : IMapper<FieldSchema, AttributeTypeCode?>
9+
public AttributeTypeCode? Map(FieldSchema source) => source.Type switch
810
{
9-
public AttributeTypeCode? Map(FieldSchema source)
10-
{
11-
switch (source.Type)
12-
{
13-
case "string":
14-
return AttributeTypeCode.String;
15-
case "guid":
16-
return AttributeTypeCode.Uniqueidentifier;
17-
case "entityreference":
18-
if (source.LookupType == "account|contact")
19-
{
20-
return AttributeTypeCode.Customer;
21-
}
22-
return AttributeTypeCode.Lookup;
23-
case "owner":
24-
return AttributeTypeCode.Owner;
25-
case "state":
26-
return AttributeTypeCode.State;
27-
case "status":
28-
return AttributeTypeCode.Status;
29-
case "decimal":
30-
return AttributeTypeCode.Decimal;
31-
case "optionsetvalue":
32-
return AttributeTypeCode.Picklist;
33-
case "number":
34-
return AttributeTypeCode.Integer;
35-
case "bigint":
36-
return AttributeTypeCode.BigInt;
37-
case "float":
38-
return AttributeTypeCode.Double;
39-
case "bool":
40-
return AttributeTypeCode.Boolean;
41-
case "datetime":
42-
return AttributeTypeCode.DateTime;
43-
case "money":
44-
return AttributeTypeCode.Money;
45-
default:
46-
return null;
47-
11+
"string" => AttributeTypeCode.String,
12+
"guid" => AttributeTypeCode.Uniqueidentifier,
13+
"entityreference" => source.LookupType == "account|contact" ? AttributeTypeCode.Customer : AttributeTypeCode.Lookup,
14+
"owner" => AttributeTypeCode.Owner,
15+
"state" => AttributeTypeCode.State,
16+
"status" => AttributeTypeCode.Status,
17+
"decimal" => AttributeTypeCode.Decimal,
18+
"optionsetvalue" => AttributeTypeCode.Picklist,
19+
"number" => AttributeTypeCode.Integer,
20+
"bigint" => AttributeTypeCode.BigInt,
21+
"float" => AttributeTypeCode.Double,
22+
"bool" => AttributeTypeCode.Boolean,
23+
"datetime" => AttributeTypeCode.DateTime,
24+
"money" => AttributeTypeCode.Money,
25+
_ => null
26+
};
4827

49-
}
50-
}
51-
}
5228
}

src/Dataverse.ConfigurationMigrationTool/Dataverse.ConfigurationMigrationTool.Console/appsettings.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
},
77
"Dataverse": {
88
"MaxThreadCount": 100,
9-
"MaxDegreeOfParallism": 1,
10-
"BatchSize": 1
9+
"MaxDegreeOfParallism": 5,
10+
"BatchSize": 20
1111
}
1212
}

0 commit comments

Comments
 (0)