fix: Correzione salvataggio campo MappedDestinationField in KeyAssociations
- Aggiunto campo MappedDestinationField al modello KeyAssociation per tracciare il campo destinazione mappato alla chiave sorgente
- Creata migration AddMappedDestinationFieldToKeyAssociation per aggiungere la colonna al database
- Implementata logica di popolamento in CreateAssociationAsync e StartDataTransferOriginal per salvare il campo destinazione mappato
- Aggiornato SaveAssociationParallelAsync per includere MappedDestinationField nelle query SQL UPDATE e INSERT
- Corretti indici parametri nella query UPDATE (da {7-9} a {8-10}) per includere il nuovo campo
- Aggiunta visualizzazione campo nell'interfaccia KeyAssociations (tabella, dettagli, export CSV)
- Implementato controllo validazione per impedire trasferimenti se il campo chiave non è mappato
- Aggiunto logging diagnostico dettagliato per debug del mapping dei campi
- Aggiornato ScheduledProfileExecutionService per popolare MappedDestinationField nelle esecuzioni schedulate
- Rimosso file BackgroundServices.cs obsoleto
- Documentazione completa creata (4 markdown files)
Fixes: Campo MappedDestinationField rimaneva NULL perché le query SQL raw non includevano il nuovo campo
This commit is contained in:
@@ -165,6 +165,7 @@ public class KeyAssociationService : IKeyAssociationService
|
||||
var restCredentialName = association.RestCredentialName;
|
||||
var sourceKeyField = association.SourceKeyField;
|
||||
var destinationKeyField = association.DestinationKeyField;
|
||||
var mappedDestinationField = association.MappedDestinationField; // AGGIUNTO
|
||||
var additionalInfo = association.AdditionalInfo;
|
||||
var dataHash = association.Data_Hash;
|
||||
var currentTime = DateTime.UtcNow;
|
||||
@@ -178,8 +179,8 @@ public class KeyAssociationService : IKeyAssociationService
|
||||
|
||||
try
|
||||
{
|
||||
_logger.LogDebug("PARALLEL: Tentativo salvataggio associazione - KeyValue: '{KeyValue}', DestinationEntity: '{DestinationEntity}', DestinationId: '{DestinationId}', RestCredentialName: '{RestCredentialName}'",
|
||||
keyValue, destinationEntity, destinationId, restCredentialName);
|
||||
_logger.LogDebug("PARALLEL: Tentativo salvataggio associazione - KeyValue: '{KeyValue}', DestinationEntity: '{DestinationEntity}', DestinationId: '{DestinationId}', RestCredentialName: '{RestCredentialName}', MappedField: '{MappedField}'",
|
||||
keyValue, destinationEntity, destinationId, restCredentialName, mappedDestinationField ?? "NULL");
|
||||
|
||||
// Implementazione thread-safe usando upsert pattern con DbContext separato
|
||||
// Prima tenta di aggiornare un record esistente
|
||||
@@ -191,12 +192,13 @@ public class KeyAssociationService : IKeyAssociationService
|
||||
UpdatedAt = {3},
|
||||
LastVerifiedAt = {4},
|
||||
AdditionalInfo = {5},
|
||||
Data_Hash = {6}
|
||||
WHERE KeyValue = {7}
|
||||
AND DestinationEntity = {8}
|
||||
AND RestCredentialName = {9}
|
||||
Data_Hash = {6},
|
||||
MappedDestinationField = {7}
|
||||
WHERE KeyValue = {8}
|
||||
AND DestinationEntity = {9}
|
||||
AND RestCredentialName = {10}
|
||||
AND IsActive = 1",
|
||||
destinationId, sourceKeyField, destinationKeyField, currentTime, currentTime, additionalInfo ?? (object)DBNull.Value, dataHash ?? (object)DBNull.Value,
|
||||
destinationId, sourceKeyField, destinationKeyField, currentTime, currentTime, additionalInfo ?? (object)DBNull.Value, dataHash ?? (object)DBNull.Value, mappedDestinationField ?? (object)DBNull.Value,
|
||||
keyValue, destinationEntity, restCredentialName);
|
||||
|
||||
if (rowsAffected > 0)
|
||||
@@ -230,6 +232,7 @@ public class KeyAssociationService : IKeyAssociationService
|
||||
KeyValue = keyValue,
|
||||
SourceKeyField = sourceKeyField,
|
||||
DestinationKeyField = destinationKeyField,
|
||||
MappedDestinationField = mappedDestinationField, // AGGIUNTO
|
||||
DestinationEntity = destinationEntity,
|
||||
DestinationId = destinationId,
|
||||
RestCredentialName = restCredentialName,
|
||||
@@ -243,8 +246,8 @@ public class KeyAssociationService : IKeyAssociationService
|
||||
parallelContext.KeyAssociations.Add(newAssociation);
|
||||
await parallelContext.SaveChangesAsync();
|
||||
|
||||
_logger.LogDebug("PARALLEL: Nuova associazione creata: KeyValue={KeyValue} -> {DestinationEntity}/{DestinationId}",
|
||||
keyValue, destinationEntity, destinationId);
|
||||
_logger.LogDebug("PARALLEL: Nuova associazione creata: KeyValue={KeyValue} -> {DestinationEntity}/{DestinationId}, MappedField={MappedField}",
|
||||
keyValue, destinationEntity, destinationId, mappedDestinationField ?? "NULL");
|
||||
|
||||
return newAssociation.Id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user