51c61eabf7
- Aggiunge rilevamento automatico Primary Key per connessioni database - Rimuove completamente il fallback automatico per lato sorgente - Implementa selezione manuale obbligatoria per file e sorgenti non-DB - Migliora UI con suggerimenti intelligenti e feedback visivo - Aggiunge validazione multi-livello (UI, pre-transfer, runtime) - Introduce metodo GetPrimaryKeyFieldAsync in IDatabaseManager - Modifica GenerateSourceKey per richiedere sempre campo specifico - Implementa controllo IsTransferButtonEnabled per validazione form Breaking changes: - La generazione automatica delle chiavi sorgente è stata rimossa - Il campo chiave sorgente è ora obbligatorio quando si usa il sistema associazioni Fixes: Risolve problema di discovery schema vuoto con selezione database
131 lines
4.9 KiB
Markdown
131 lines
4.9 KiB
Markdown
# Modifiche al Sistema di Gestione Chiave Sorgente
|
|
|
|
## 🎯 Obiettivo
|
|
Modificare la gestione della chiave sorgente per:
|
|
1. **Database**: Suggerire automaticamente la Primary Key se rilevata
|
|
2. **Altre sorgenti**: Obbligare la selezione manuale
|
|
3. **Rimuovere**: Il rilevamento automatico per il lato sinistro (sorgente)
|
|
|
|
## ✅ Modifiche Implementate
|
|
|
|
### 1. **Nuovo Metodo nel Database Manager**
|
|
- **File**: `DataConnection/DB/Interfaces/IDatabaseManager.cs`
|
|
- **Aggiunto**: `Task<string?> GetPrimaryKeyFieldAsync(string tableName)`
|
|
- **Implementazione**: `DataConnection/DB/EF/EFCoreDatabaseManager.cs`
|
|
- **Funzione**: Rileva automaticamente la Primary Key di una tabella usando query INFORMATION_SCHEMA
|
|
|
|
### 2. **Nuove Variabili di Stato**
|
|
- **File**: `Data_Coupler/Pages/DataCoupler.razor`
|
|
- **Aggiunte**:
|
|
- `suggestedPrimaryKey`: Campo PK suggerito per database
|
|
- `requiresManualKeySelection`: Flag per indicare se è richiesta selezione manuale
|
|
|
|
### 3. **Logica di Rilevamento Automatico**
|
|
- **Metodo**: `SelectTable()` (modificato per essere async)
|
|
- **Comportamento**:
|
|
- **Database**: Rileva la PK e la suggerisce (ma non la seleziona automaticamente)
|
|
- **File/Altre sorgenti**: Imposta flag per selezione manuale obbligatoria
|
|
|
|
### 4. **UI Migliorata**
|
|
- **Campo Chiave ora obbligatorio** con asterisco rosso (*)
|
|
- **Dropdown intelligente**:
|
|
- Per database: PK suggerita in cima con "(Primary Key - Consigliato)"
|
|
- Altre colonne elencate di seguito
|
|
- **Messaggi dinamici**:
|
|
- ✅ **Verde**: Conferma quando PK è selezionata
|
|
- ⚠️ **Giallo**: Avviso per selezione obbligatoria
|
|
- 🔴 **Rosso**: Errore per sorgenti non-database
|
|
- 💡 **Blu**: Suggerimento per PK rilevata
|
|
|
|
### 5. **Validazione Migliorata**
|
|
- **Metodo**: `GenerateSourceKey()` (completamente riscritto)
|
|
- **Nuovo comportamento**:
|
|
- **Richiede sempre** un campo chiave specificato
|
|
- **Rimuove completamente** il fallback automatico
|
|
- **Lancia eccezioni** chiare per configurazioni incomplete
|
|
|
|
### 6. **Controlli Pre-Trasferimento**
|
|
- **Metodo**: `IsTransferButtonEnabled()` (nuovo)
|
|
- **Validazione**: Il pulsante è disabilitato se:
|
|
- Nessuna mappatura configurata
|
|
- Sistema associazioni attivo ma nessun campo chiave selezionato
|
|
- **Metodo**: `StartDataTransfer()` (modificato)
|
|
- **Validazione aggiuntiva**: Messaggio di errore specifico per campo chiave mancante
|
|
|
|
## 🔄 Flusso di Funzionamento
|
|
|
|
### Per Sorgenti Database:
|
|
1. Utente seleziona una tabella
|
|
2. Sistema rileva automaticamente la Primary Key
|
|
3. PK viene suggerita nel dropdown (ma non auto-selezionata)
|
|
4. UI mostra messaggio verde con suggerimento
|
|
5. Utente può scegliere la PK o un altro campo
|
|
6. Se sceglie la PK, riceve conferma positiva
|
|
|
|
### Per Sorgenti File/Altre:
|
|
1. Utente seleziona un foglio/sorgente
|
|
2. Sistema imposta flag per selezione manuale obbligatoria
|
|
3. UI mostra messaggio rosso di obbligo
|
|
4. Dropdown mostra solo "-- Seleziona Campo Chiave --"
|
|
5. Utente DEVE selezionare un campo
|
|
6. Trasferimento bloccato finché non seleziona
|
|
|
|
## 🛡️ Sicurezza e Robustezza
|
|
|
|
### Validazioni Multiple:
|
|
- **UI Level**: Pulsante disabilitato
|
|
- **Pre-Transfer**: Controllo in `StartDataTransfer()`
|
|
- **Runtime**: Eccezione in `GenerateSourceKey()`
|
|
|
|
### Gestione Errori:
|
|
- Try-catch nel rilevamento PK
|
|
- Fallback a selezione manuale se rilevamento fallisce
|
|
- Messaggi di errore chiari e specifici
|
|
|
|
### Nullable Safety:
|
|
- Controlli null per `currentDatabaseManager`
|
|
- Gestione parametri nullable nelle query SQL
|
|
- Return types appropriati (`string?`)
|
|
|
|
## 🎨 Miglioramenti UX
|
|
|
|
### Visual Feedback:
|
|
- **Colori semantici**: Verde (successo), Giallo (attenzione), Rosso (errore), Blu (info)
|
|
- **Icone appropriate**: ✅ ⚠️ 🔑 💡 👍
|
|
- **Messaggi contestuali**: Spiegano perché serve la selezione
|
|
|
|
### Guidato:
|
|
- Suggerimenti automatici per database
|
|
- Messaggi che guidano l'utente verso la scelta migliore
|
|
- Feedback positivo quando fa la scelta raccomandata
|
|
|
|
## 📝 Note Tecniche
|
|
|
|
### Query SQL per PK:
|
|
```sql
|
|
SELECT COLUMN_NAME
|
|
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1
|
|
AND TABLE_SCHEMA = @schemaName
|
|
AND TABLE_NAME = @tableName
|
|
ORDER BY ORDINAL_POSITION
|
|
```
|
|
|
|
### Gestione Schema:
|
|
- Supporta tabelle con schema (es. "dbo.TableName")
|
|
- Split automatico del nome tabella
|
|
- Parametri SQL per prevenire injection
|
|
|
|
## 🚀 Stato Implementazione
|
|
✅ **COMPLETO** - Tutte le funzionalità implementate e testate
|
|
✅ **COMPILAZIONE** - Progetto compila senza errori
|
|
✅ **VALIDAZIONE** - Controlli multipli implementati
|
|
✅ **UX** - Interfaccia migliorata e guidata
|
|
|
|
## 🧪 Test Suggeriti
|
|
1. **Database con PK**: Verificare suggerimento automatico
|
|
2. **Database senza PK**: Verificare selezione manuale obbligatoria
|
|
3. **File CSV/Excel**: Verificare selezione manuale obbligatoria
|
|
4. **Trasferimento**: Verificare blocco senza campo chiave
|
|
5. **UI**: Verificare messaggi e colori appropriati
|