Files
Data-Coupler/COMPOSITE_API_IMPLEMENTATION.md
Alessio 75a9bbb0c8 Rimozione limiti di estrazione dati per supporto dataset completi
- 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.
2025-07-13 21:37:16 +02:00

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 composite
  • SalesforceCompositeRequest: Richiesta composite per Salesforce API
  • SalesforceCompositeSubRequest: Sotto-richiesta nell'ambito di una chiamata composite
  • SalesforceCompositeResponse: Risposta dell'API Composite di Salesforce
  • SalesforceCompositeSubResponse: 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 creare
      • recordsForUpdate: record esistenti da aggiornare

3. Esecuzione Parallela

  • Esegue in parallelo:
    • BatchCreateEntitiesAsync per tutti i nuovi record
    • BatchUpdateEntitiesAsync per 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 FindKeyAssociationByDestinationIdAsync non esisteva, quindi è stata implementata una gestione semplificata
  • Potrebbe essere necessario estendere l'interfaccia IDataConnectionCredentialService in 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:

  1. Configurazione credenziali Salesforce con API Composite abilitata
  2. Test con dataset piccolo (< 25 record) per validare funzionalità base
  3. Test con dataset grande per verificare la necessità di chunking
  4. Test fallimenti selettivi per validare gestione errori
  5. Test associazioni per verificare creazione/aggiornamento corretto

File Modificati

  1. DataConnection/REST/Implementations/SalesforceServiceClient.cs

    • Aggiunte classi e metodi per Composite API
  2. Data_Coupler/Pages/DataCoupler.razor.cs

    • Aggiunto metodo composite
    • Modificato routing del trasferimento dati

Prossimi Passi Consigliati

  1. Implementare chunking per gestire > 25 record per batch
  2. Estendere interfaccia IDataConnectionCredentialService con metodi mancanti
  3. Aggiungere metriche performance per comparare metodo originale vs composite
  4. Aggiungere configurazione per abilitare/disabilitare composite per debugging
  5. 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