75a9bbb0c8
- Rimosso limite TOP 1000 in EFCoreDatabaseManager.GetAllRecordsAsync - Eliminati controlli di sicurezza con limiti automatici in DataCoupler - Aggiornata documentazione per riflettere estrazione senza limiti - Supporto completo per dataset di grandi dimensioni - Mantenuto batching automatico Salesforce (25 record/batch) in parallelo Ora il sistema supporta l'estrazione completa di tabelle e query custom senza restrizioni artificiali, ideale per migrazioni e use cases enterprise.
6.6 KiB
6.6 KiB
Implementazione Chiamate Composite per Salesforce
Panoramica delle Modifiche
Questa implementazione modifica il DataCoupler per utilizzare le Salesforce Composite API al posto delle singole chiamate REST create/update, migliorando significativamente le performance e l'efficienza del trasferimento dati.
Modifiche Implementate
1. SalesforceServiceClient (DataConnection/REST/Implementations/SalesforceServiceClient.cs)
Aggiunte le seguenti classi e metodi:
Nuove Classi di Supporto:
CompositeOperationResult: Classe pubblica per rappresentare il risultato di un'operazione compositeSalesforceCompositeRequest: Richiesta composite per Salesforce APISalesforceCompositeSubRequest: Sotto-richiesta nell'ambito di una chiamata compositeSalesforceCompositeResponse: Risposta dell'API Composite di SalesforceSalesforceCompositeSubResponse: Sotto-risposta di un'operazione composite
Nuovi Metodi:
BatchCreateEntitiesAsync
- Esegue multiple operazioni di creazione usando l'API Composite di Salesforce
- Parametri:
entityName,entityDataList,cancellationToken - Ritorna:
List<CompositeOperationResult>con i risultati di ogni operazione
BatchUpdateEntitiesAsync
- Esegue multiple operazioni di aggiornamento usando l'API Composite di Salesforce
- Parametri:
entityName,updateData(Dictionary<entityId, entityData>),cancellationToken - Ritorna:
List<CompositeOperationResult>con i risultati di ogni operazione
2. DataCoupler (Data_Coupler/Pages/DataCoupler.razor.cs)
Metodi Aggiunti:
StartDataTransferWithComposite
- Nuova implementazione del trasferimento dati che utilizza le chiamate composite
- Analizza prima tutti i record per determinare quali creare vs aggiornare
- Esegue le operazioni in batch paralleli per massime performance
CreateAssociationAsync
- Helper per creare associazioni per record creati tramite composite
- Gestisce la persistenza delle associazioni chiave-valore
UpdateAssociationVerificationAsync
- Helper per aggiornare la verifica delle associazioni esistenti
HandleFailedUpdateAsync
- Gestisce gli aggiornamenti falliti eliminando associazioni non valide
ShowTransferResults
- Helper per formattare e mostrare i risultati del trasferimento
Modifiche ai Metodi Esistenti:
StartDataTransfer (modificato)
- Ora è un wrapper che:
- Detecta automaticamente se il client è Salesforce
- Se sì, usa
StartDataTransferWithComposite - Altrimenti usa il metodo originale (
StartDataTransferOriginal)
Flusso di Elaborazione Composite
1. Recupero Dati Sorgente
- Come il metodo originale, recupera tutti i record dalla sorgente (DB o file)
2. Analisi e Trasformazione
- Per ogni record:
- Trasforma secondo i mapping configurati
- Analizza le associazioni esistenti per determinare se è CREATE vs UPDATE
- Raggruppa i record in due batch separati:
recordsForCreate: nuovi record da crearerecordsForUpdate: record esistenti da aggiornare
3. Esecuzione Parallela
- Esegue in parallelo:
BatchCreateEntitiesAsyncper tutti i nuovi recordBatchUpdateEntitiesAsyncper tutti gli aggiornamenti
- Attende entrambe le operazioni con
Task.WhenAll
4. Elaborazione Risultati
- Processa i risultati di entrambi i batch
- Per ogni operazione riuscita:
- Crea/aggiorna associazioni chiave-valore
- Registra il successo nei risultati di trasferimento
- Per operazioni fallite:
- Registra l'errore
- Gestisce la pulizia delle associazioni non valide
5. Gestione Associazioni
- CREATE: Crea nuove associazioni chiave-valore se configurate
- UPDATE: Aggiorna timestamp di verifica delle associazioni esistenti
- FAILED UPDATE: Elimina associazioni non valide per mantenere coerenza
Vantaggi dell'Implementazione
1. Performance Migliorate
- Riduzione chiamate API: Da N chiamate singole a 2 chiamate batch (max)
- Esecuzione parallela: CREATE e UPDATE eseguiti contemporaneamente
- Riduzione latenza: Meno round-trip verso Salesforce
2. Efficienza di Rete
- Batch processing: Salesforce API Composite supporta fino a 25 operazioni per richiesta
- Ottimizzazione bandwidth: Meno overhead HTTP
3. Gestione Migliorata degli Errori
- Isolamento errori: Un errore in un'operazione non blocca le altre
- Reporting dettagliato: Risultati granulari per ogni record
- Rollback selettivo: Solo le operazioni fallite vengono gestite
4. Backward Compatibility
- Auto-detection: Usa composite solo per Salesforce
- Fallback: Altri provider REST continuano a usare il metodo originale
- Zero breaking changes: L'interfaccia utente rimane identica
Limitazioni e Considerazioni
1. Limitazioni API Salesforce
- Massimo 25 operazioni per chiamata Composite
- Se ci sono più di 25 record, sarà necessario implementare chunking
- Al momento l'implementazione non gestisce questo caso limite
2. Gestione Associazioni
- Il metodo
FindKeyAssociationByDestinationIdAsyncnon esisteva, quindi è stata implementata una gestione semplificata - Potrebbe essere necessario estendere l'interfaccia
IDataConnectionCredentialServicein futuro
3. Logging e Debug
- Aggiunto logging specifico con prefix "COMPOSITE:" per facilitare debugging
- Mantiene compatibilità con logging esistente
Testing e Validazione
La build del progetto è stata verificata con successo. I test effettivi con Salesforce richiederanno:
- Configurazione credenziali Salesforce con API Composite abilitata
- Test con dataset piccolo (< 25 record) per validare funzionalità base
- Test con dataset grande per verificare la necessità di chunking
- Test fallimenti selettivi per validare gestione errori
- Test associazioni per verificare creazione/aggiornamento corretto
File Modificati
-
DataConnection/REST/Implementations/SalesforceServiceClient.cs- Aggiunte classi e metodi per Composite API
-
Data_Coupler/Pages/DataCoupler.razor.cs- Aggiunto metodo composite
- Modificato routing del trasferimento dati
Prossimi Passi Consigliati
- Implementare chunking per gestire > 25 record per batch
- Estendere interfaccia IDataConnectionCredentialService con metodi mancanti
- Aggiungere metriche performance per comparare metodo originale vs composite
- Aggiungere configurazione per abilitare/disabilitare composite per debugging
- Test di carico con dataset reali di grandi dimensioni
Note di Implementazione
- L'implementazione è thread-safe
- Gestisce correttamente timeout e cancellation tokens
- Mantiene tutti i meccanismi di sicurezza esistenti
- Compatibile con il sistema di profili e credenziali esistente