- Aggiunta validazione percorsi file prima del salvataggio profili - Implementati metodi di lettura file CSV e Excel per schedulazioni - Supporto doppia modalità: caricamento browser (preview) e percorso manuale (schedulazione) - Gestione completa deletion sync anche per file CSV/Excel - Rilevamento automatico separatori CSV (virgola, punto e virgola, tab, pipe) - Supporto formati Excel legacy (.xls) e moderni (.xlsx) - Abilitati profili file nella UI di schedulazione - Logging dettagliato per troubleshooting - Documentazione completa in CSV_SCHEDULING_IMPLEMENTATION.md - Aggiornati README.md e copilot-instructions.md con nuove feature - Rimosso testo 'TEST' dalla pagina di login
13 KiB
Implementazione Schedulazione File CSV/Excel
Data
24 Gennaio 2026
Panoramica
Implementata la funzionalità completa di schedulazione per profili che utilizzano file CSV o Excel come sorgente dati. Precedentemente questa funzionalità era disattivata per motivi di sicurezza, ora è completamente funzionale con validazioni appropriate.
Modifiche Implementate
1. Validazione File CSV nel Salvataggio Profilo
File: Data_Coupler/Pages/DataCoupler.razor.cs
Modifica: Aggiunta validazione nel metodo OnProfileSaved per verificare che:
- Il file CSV/Excel specificato esista nel filesystem
- Il file sia leggibile dall'applicazione
Implementazione:
// Validazione specifica per file CSV
if (profile.SourceType == "file" && !string.IsNullOrEmpty(profile.SourceFilePath))
{
// Verifica esistenza
if (!System.IO.File.Exists(profile.SourceFilePath))
{
await JSRuntime.InvokeVoidAsync("alert",
"Errore: Il file non esiste o non è accessibile.");
return;
}
// Verifica leggibilità
try
{
using var fs = System.IO.File.OpenRead(profile.SourceFilePath);
fs.Close();
}
catch (Exception fileEx)
{
await JSRuntime.InvokeVoidAsync("alert",
$"Errore: Il file non può essere letto. Dettagli: {fileEx.Message}");
return;
}
}
Benefici:
- Previene errori durante l'esecuzione schedulata
- Fornisce feedback immediato all'utente in fase di configurazione
- Verifica i permessi di lettura del file
2. Implementazione Lettura File per Schedulazioni
File: Data_Coupler/Services/ScheduledProfileExecutionService.cs
Modifica: Implementati i seguenti metodi per la lettura di file CSV e Excel:
Metodi Implementati:
-
GetAllRecordsFromFileAsync- Metodo principale- Determina il tipo di file (CSV, XLSX, XLS)
- Verifica esistenza del file
- Delega alla funzione appropriata
-
ReadCsvFileAsync- Lettura file CSV- Rilevamento automatico del separatore (
,,;,\t,|) - Parsing corretto con gestione virgolette
- Supporto per file di grandi dimensioni
- Rilevamento automatico del separatore (
-
ReadExcelFileAsync- Lettura file Excel- Supporto per formati
.xlsxe.xls - Utilizzo di
ExcelDataReaderlibrary - Registrazione encoding provider (
System.Text.CodePagesEncodingProvider) - Lettura del primo foglio Excel
- Supporto per formati
-
Helper Methods:
DetectCsvSeparator: Rilevamento automatico separatore CSVParseCsvLine: Parsing linea CSV con gestione quote e escape
Esempio di utilizzo:
private async Task<IEnumerable<Dictionary<string, object>>> GetAllRecordsFromSourceAsync(
DataCouplerProfile profile, IDatabaseManager? databaseManager)
{
if (profile.SourceType.ToLower() == "file")
{
return await GetAllRecordsFromFileAsync(profile);
}
// ... altri tipi
}
Caratteristiche:
- Supporto completo per CSV con separatori multipli
- Gestione corretta di campi con virgolette e caratteri speciali
- Parsing robusto con logging dettagliato
- Compatibilità con file Excel legacy (.xls) e moderni (.xlsx)
3. Abilitazione Profili File nella Schedulazione
File: Data_Coupler/Pages/Scheduling.razor
Modifica: Rimosso il filtro Where(p => p.SourceType != "file") che escludeva i profili file dalla lista di schedulazione.
Prima:
@foreach (var profile in availableProfiles.Where(p => p.SourceType != "file"))
{
<option value="@profile.Id">@profile.Name</option>
}
Dopo:
@foreach (var profile in availableProfiles)
{
<option value="@profile.Id">@profile.Name @(profile.SourceType == "file" ? "(File)" : "")</option>
}
Miglioramenti UI:
- Etichetta
(File)per identificare profili con file - Messaggio informativo aggiornato:
ℹ️ I profili con file CSV/Excel come sorgente sono ora supportati per le schedulazioni. Il file specificato nel profilo verrà letto ad ogni esecuzione.
4. Gestione Cancellazioni per File CSV
Implementazione: La gestione delle cancellazioni opzionali funziona automaticamente anche per i profili file grazie all'architettura esistente.
Flusso:
- I record vengono letti dal file CSV/Excel
- Vengono trasformati in
Dictionary<string, object>come i record database - Il sistema di associazioni (
KeyAssociationService) traccia i record - Se abilitato, il
DeletionSyncServicesincronizza le eliminazioni
Compatibilità:
- ✅ Supporto completo per
EnableDeletionSyncflag - ✅ Tracking chiavi sorgente (
SourceKeyField) - ✅ Sistema di associazioni record
- ✅ Pre-discovery di record esistenti
Gestione File per Schedulazioni
Due Modalità di Caricamento
1. Caricamento Browser (per Preview)
- Scopo: Configurare mapping e vedere anteprima dati
- Funzionamento:
- File caricato tramite browser (InputFile component)
- Processato in memoria
- Non salvato sul server
- Uso: Solo per configurazione iniziale del profilo
2. Percorso Manuale (per Schedulazione) ⭐
- Scopo: Specificare posizione file per schedulazioni
- Funzionamento:
- Utente inserisce percorso completo (es:
C:\Data\products.csv) - Sistema valida esistenza e leggibilità
- Percorso salvato nel profilo
- Utente inserisce percorso completo (es:
- Uso: Obbligatorio per profili che devono essere schedulati
Esempi di Percorsi Validi
Windows:
C:\Data\products.csv
\\server\share\customers.xlsx
D:\ImportFiles\orders.csv
Linux/Container:
/data/products.csv
/mnt/share/customers.xlsx
/app/import/orders.csv
Workflow Completo
-
Configurazione Iniziale:
- Carica file da browser per preview
- Configura mapping campi vedendo i dati reali
- Importante: Questo file è solo temporaneo
-
Preparazione Schedulazione:
- Posiziona il file nella location definitiva sul server
- Inserisci il percorso completo nel campo "Percorso File sul Server"
- Clicca "Valida e Carica" per verificare
- Salva il profilo
-
Esecuzione Schedulata:
- Il sistema legge il file dal percorso salvato
- Il file deve esistere e essere accessibile
- Aggiornamenti al file vengono letti automaticamente
Considerazioni Importanti
Sicurezza:
- Il file deve essere accessibile dal processo dell'applicazione
- Verificare permessi di lettura sulla directory
- Per ambienti multi-utente, considerare ACL appropriati
Percorsi Relativi vs Assoluti:
- Consigliato: Percorsi assoluti per chiarezza
- Se si usano percorsi relativi, sono relativi alla working directory dell'applicazione
Aggiornamento File:
- Il sistema legge sempre il file corrente dal percorso
- Per aggiornare i dati, basta sovrascrivere il file nella stessa posizione
- Non serve modificare il profilo se il percorso rimane invariato
Deployment Container:
- Montare volumi per directory contenenti i file
- Esempio docker-compose:
volumes: - /host/data:/data # Monta directory host in /data nel container - Nel profilo usare:
/data/products.csv
Best Practices:
- ✅ Usare una directory dedicata per file di import (es:
/data/imports/) - ✅ Nominare i file in modo descrittivo
- ✅ Implementare rotazione/backup dei file
- ✅ Monitorare spazio disco
- ❌ Non usare directory temporanee che vengono pulite
- ❌ Non usare percorsi di rete senza verifica connessione
Funzionamento Completo
Creazione Profilo con File CSV
-
L'utente seleziona "File" come tipo sorgente
-
Opzione A - Caricamento Browser (per preview):
- Carica un file CSV/Excel tramite browser
- Il file viene processato in memoria per preview
- Permette di configurare il mapping vedendo i dati reali
- Non viene salvato sul server - solo per anteprima
-
Opzione B - Percorso Manuale (richiesto per schedulazione):
- Inserisce il percorso completo del file sul server (es:
C:\Data\products.csv) - Clicca "Valida e Carica" per:
- Verificare che il file esista
- Verificare che sia leggibile
- Caricare preview per configurare mapping
- Il percorso viene salvato nel profilo
- Inserisce il percorso completo del file sul server (es:
-
L'utente configura il mapping campi
-
Salvataggio: Il sistema valida che il file sia accessibile e leggibile
-
Il percorso completo originale del file viene salvato in
SourceFilePath
Nota Importante: Per le schedulazioni è necessario specificare il percorso file manualmente. Il file deve essere accessibile dal server nella posizione specificata.
Schedulazione Profilo File
- L'utente crea una nuova schedulazione
- Seleziona un profilo con
SourceType = "file" - Configura la frequenza (giornaliera, settimanale, intervallo, ecc.)
- Abilita opzionalmente
EnableDeletionSyncper sincronizzare eliminazioni
Esecuzione Schedulata
- Il background service avvia l'esecuzione alla schedulazione prevista
ScheduledProfileExecutionService.ExecuteProfileAsyncviene chiamato- Il servizio legge il file dal percorso salvato usando
GetAllRecordsFromFileAsync - I record vengono trasformati e inviati alla destinazione REST
- Il sistema di associazioni traccia i record per evitare duplicati
- Se configurato, vengono sincronizzate le eliminazioni
Sicurezza e Validazioni
Validazioni Implementate:
- ✅ Verifica esistenza file prima del salvataggio profilo
- ✅ Verifica permessi di lettura file
- ✅ Gestione eccezioni durante la lettura file
- ✅ Logging dettagliato per troubleshooting
- ✅ Validazione formato file (CSV, XLSX, XLS)
Considerazioni di Sicurezza:
- Il file deve essere accessibile dal processo dell'applicazione
- Percorsi assoluti sono salvati nel database
- Per ambienti containerizzati, montare volumi con i file
- Permessi filesystem devono consentire lettura
Formati File Supportati
CSV
- Separatori:
,(virgola),;(punto e virgola),\t(tab),|(pipe) - Rilevamento automatico: Sì
- Gestione quote: Supporto completo per campi tra virgolette
- Escape caratteri: Supporto per
""(double quote escape) - Dimensione massima: 50 MB (configurabile)
Excel
- Formati:
.xlsx(Office Open XML),.xls(Binary Format) - Fogli multipli: Legge il primo foglio per default
- Header: Prima riga utilizzata come intestazione
- Dimensione massima: 50 MB (configurabile)
Esempi di Utilizzo
Esempio 1: Schedulazione Giornaliera CSV
Profilo: "Import Prodotti da CSV"
- Sorgente: File CSV (products.csv)
- Destinazione: REST API (Salesforce)
- SourceKeyField: "ProductCode"
- UseRecordAssociations: true
Schedulazione: "Import Prodotti Quotidiano"
- Tipo: Daily (Giornaliera)
- Ora: 08:00
- EnableDeletionSync: false
Comportamento: Ogni giorno alle 08:00, il sistema legge products.csv, trasforma i dati secondo il mapping configurato, e li invia a Salesforce. I record esistenti vengono aggiornati, i nuovi creati.
Esempio 2: Sincronizzazione con Eliminazioni
Profilo: "Sincronizza Clienti Excel"
- Sorgente: File Excel (customers.xlsx)
- Destinazione: REST API (SAP Business One)
- SourceKeyField: "CustomerID"
- UseRecordAssociations: true
Schedulazione: "Sync Clienti Settimanale"
- Tipo: Weekly (Settimanale)
- Giorno: Lunedì
- Ora: 06:00
- EnableDeletionSync: true
Comportamento: Ogni lunedì alle 06:00, il sistema:
- Legge
customers.xlsx - Sincronizza i clienti con SAP Business One
- Identifica clienti eliminati dal file
- Elimina i corrispondenti record in SAP B1
Testing e Validazione
Test Consigliati:
-
Test file CSV con separatori diversi
- Comma-separated
- Semicolon-separated
- Tab-separated
-
Test file Excel
- Formato .xlsx moderno
- Formato .xls legacy
- Fogli con molte colonne/righe
-
Test errori
- File non esistente
- File senza permessi di lettura
- File corrotto
- File troppo grande
-
Test schedulazione
- Esecuzione immediata manuale
- Esecuzione automatica schedulata
- Verifica storico esecuzioni
- Test con
EnableDeletionSyncattivo
Limitazioni Note
- Fogli Excel: Attualmente viene letto solo il primo foglio del file Excel
- Dimensione file: Limite di 50 MB per sicurezza (configurabile in codice)
- Percorsi assoluti: I file devono essere accessibili tramite percorso assoluto
- Encoding: Supporto per encoding standard (UTF-8, Windows-1252)
Prossimi Sviluppi Potenziali
- Supporto per lettura di fogli Excel multipli
- Configurazione dinamica del foglio Excel da leggere
- Supporto per file remoti (HTTP, FTP, Azure Blob)
- Cache intelligente per file grandi non modificati
- Validazione schema file prima dell'esecuzione
- Notifiche in caso di file non trovato durante schedulazione
Conclusioni
L'implementazione della schedulazione per file CSV/Excel è ora completa e robusta. La funzionalità include:
✅ Validazione completa del file in fase di configurazione
✅ Lettura affidabile di CSV con separatori multipli
✅ Supporto per file Excel moderni e legacy
✅ Integrazione completa con sistema di associazioni
✅ Supporto per sincronizzazione eliminazioni opzionale
✅ Logging dettagliato per troubleshooting
✅ Error handling robusto
Gli utenti possono ora schedulare trasferimenti dati da file CSV/Excel esattamente come farebbero con sorgenti database, con le stesse funzionalità avanzate di tracking record e sincronizzazione.