Nella lezione precedente #
Abbiamo apportato modifiche al nostro modello di applicazione anagrafica, introducendo attributi calcolati, attributi con vincoli di dominio e ulteriori validazioni a livello di classe (Class warning). In Crea la tua prima applicazione, inoltre, abbiamo visto brevemente come gestire manualmente dati nell’applicazione generata tramite le API GraphQL.
Lavorare con dati reali #
Il nostro modello è ancora relativamente semplice (ha solo una classe e una vista applicativa) ma è abbastanza complesso da permetterci di mettere momentaneamente in pausa la modellazione e “giocare” col sistema generato. In questa lezione e nella prossima esploreremo alcuni degli strumenti che l’applicazione offre per gestire dati.
Abbiamo già inserito manualmente alcuni impiegati dalle API GraphQL; questa pratica è comoda se vogliamo testare le interfacce esposte, o se vogliamo verificare che l’applicazione soddisfi i requisiti modellati (e apportare modifiche in poco tempo), ma non scala se dobbiamo trasferire sul nostro sistema centinaia di record memorizzati altrove.
Nella realtà , è molto probabile che chi modella un’applicazione Livebase possegga già dei dati da trasferire sulla Cloudlet; questi dati, quando non risiedono su altri sistemi, solitamente sono memorizzati in fogli di calcolo. Convenientemente, Livebase offre uno strumento, l’Excel Importer, in grado di ricevere file contenenti fogli di calcolo, processarne il contenuto e importare automaticamente queste informazioni nel database. In questa lezione, quindi, useremo l’Excel Importer per popolare ulteriormente la nostra classe Employee.
Utilizza l’Excel Importer per aggiungere record a Employee #
L’Excel Importer consente di importare dati provenienti da fogli Excel opportunamente formattati sul database di un’applicazione generata con Livebase. Dato un file Excel, il suo contenuto viene letto e processato in un’unica operazione che non richiede ulteriori interventi, in modo simile all’avvio di una Cloudlet. Ciascun foglio di calcolo è una tabella le cui righe rappresentano oggetti di una classe del modello; la tabella nella sua interezza esprime quindi l’ aggiunta di informazioni (append) a un database generato a partire da un modello.
Formato dei fogli Excel, cenni #
L’Excel Importer accetta esclusivamente file con estensione .xlsx
(Excel); un file (cartella di lavoro) può contenere uno o più fogli di lavoro. Per un foglio, ciascuna riga deve rispettare la struttura dichiarata nel modello: vanno rispettati il tipo degli attributi, i domini di validazione e tutti gli altri vincoli esprimibili. Lo stesso discorso vale per i vincoli sui ruoli della classe nelle relazioni, un tema che ancora non abbiamo introdotto.
Ciascun foglio di lavoro deve quindi contenere una riga di intestazione (header) che riporti i nomi degli attributi della classe del modello di riferimento, ognuno su una colonna distinta. L’ordine delle colonne non è rilevante. Il foglio stesso, inoltre, deve avere come nome il nome della classe a cui è riferita l’importazione.
I fogli possono assumere tre forme: flat sheet, reference sheet e relation sheet. Il flat sheet è il formato più semplice e consente di aggiungere oggetti con solamente attributi; gli altri due consentono di aggiungere oggetti con attributi e riferimenti a ruoli o associare oggetti tra due classi. Le relazioni sono un tema che al momento non ci interessa, dato che Employee è la nostra unica classe. Per ora, utilizziamo dunque un flat sheet.
Esamina un flat sheet #
Abbiamo precompilato un file contenente 500 nuovi impiegati che puoi scaricare cliccando sul seguente bottone:
Prima di procedere con l’importazione, diamo un’occhiata al file aprendolo in un editor compatibile (MS Excel, LibreOffice Calc, etc…).
Possiamo notare che:
- è presente un unico foglio chiamato
Employee
; - nella riga di intestazione sono elencati i nomi di tutti gli attributi di Employee, (first_name, last_name, date_of_birth…), inclusi quelli che abbiamo aggiunto nell’ultima lezione (position, team …);
- ciascuna riga rappresenta un nuovo oggetto che importeremo nella classe: le celle in corrispondenza di ciascun attributo/colonna faranno assumere quel valore all’attributo;
- il contenuto delle celle è coerente col tipo di dato scelto per ciascun attributo: troviamo date per date_of_birth e date_joined, numeri per hourly_cost e stringhe per tutto il resto. Ulteriori informazioni sui tipi di dato supportati sono riportati nella guida.
Possiamo inoltre notare che i record soddisfano tutti i vincoli che abbiamo imposto: first_name, last_name e date_of_birth sono sempre valorizzate (vincolo required) e non ci sono impiegati con lo stesso nome, cognome e data di nascita (vincolo unique sulla chiave formata dai tre attributi); infine, sono rispettati i Class warning stringenti che abbiamo definito sull’Application Schema: nessun impiegato ha meno di 20 anni o è stato assunto in una data futura. Alcuni record potrebbero invece violare il controllo sul salario minimo, ma trattandosi di un Class warning non stringente, ciò non costituisce un problema.
Effettua l’upload del file #
Il nostro file è ben strutturato e valido. Possiamo chiuderlo e procedere con l’importazione: dalla Dashboard, apri il Cloudlet menu
() di Workforce e seleziona la voce Upload Excel
; dalla finestra, seleziona il file Employees_append.xlsx
appena scaricato.
Osserviamo lo stato della Cloudlet: l’Excel Importer analizza e convalida file sia rispetto alla struttura delle tabelle nel database di Workforce, che ai dati preesistenti, in cerca di eventuali violazioni della chiave unique o altri vincoli.
L’Excel Importer è pensato per processare in tempi accettabili anche file molto grandi, nell’ordine del mezzo milione di righe. Nel nostro caso, 500 righe è un numero esiguo, pertanto l’importazione terminerà in pochi secondi e senza errori. Al termine del processo, nel database saranno presenti 500 nuovi oggetti che andranno a sommarsi ai 5 record inseriti in precedenza.
Nella prossima lezione… #
Introdurremo le relazioni e le useremo per collegare Employee a nuove classi del modello: Modella relazioni.