Relazione Attività di Tirocinio 1 - Introduzione Nell’ambito dell’attività di tirocinio svolta presso l’Assessorato Bilancio e Finanze, ci è stato richiesto di realizzare delle pagine web dinamiche da pubblicare sul sito della Regione Sicilia, che servissero ad interfacciare un database di circolari amministrative. Entrando più nel dettaglio il sistema da noi realizzato consente, dopo l’autenticazione dell’utente tramite l’inserimento di username e password, di inserire nel database dati concernenti una nuova circolare, modificare un record esistente o cancellarlo del tutto. Per far questo ci siamo serviti della tecnologia delle Active Server Pages (ASP), particolarmente indicata per le interazioni on-line con i database. 2 - Active Server Pages In principio il Web era una semplice collezione di pagine HTML statiche collegate tra di loro tramite link ipertestuali. Lo scopo principale era quello di rendere disponibile su Internet documenti correlati come in un enorme ipertesto. La necessità di una maggiore interattività tra l’utente e il server Web, nata soprattutto nel momento in cui grandi aziende hanno visto nella rete delle reti, un nuovo veicolo commerciale, ha indirizzato gli sforzi nello sviluppo di strumenti per rendere il Web sempre più "dinamico". Un classico esempio è dato dai motori di ricerca: l’utente inserisce in una form una parola chiave e invia al server la richiesta restando in attesa di una risposta in tempo reale. Dalla parte del server viene a questo punto attivata una procedura in grado di interrogare un database e di generare una pagina HTML con la lista dei link richiesti. Per fare questo, insieme ad altri linguaggi, fu sviluppato il linguaggio ASP, che consente di sfruttare a pieno le risorse presenti sul server per la creazione di pagine web. Fig.1 – Active Server Pages L’utilizzo per cui era stata progettata la tecnologia ASP, era originariamente quello di interfacciare il browser con un database, ma basandosi sul modello COM (Component Object Model), ASP è in grado di interagire con le applicazioni che seguono questo standard e riportare i risultati di questa interazione sotto forma di pagine Web. Ad esempio la richiesta di un utente di visualizzare una tabella si traduce in una richiesta da parte di ASP verso il database di accedere alla tabella in questione, rappresentarla internamente tramite un oggetto ADO e tradurre il contenuto della tabella in una serie di tag HTML. La possibilità di interagire con database ODBC compatibili, pone ASP come uno dei mezzi più efficaci per la realizzazione di applicazioni distribuite indipendentemente dal database utilizzato. 3 - Il Progetto Dopo aver analizzato le richieste abbiamo progettato quale doveva essere la struttura del nostro sistema, dapprima definendo una struttura per il database tale da ottimizzarne l’accessibilità, e in seguito creando uno schema ad albero che illustrasse i collegamenti tra le varie pagine. 3.1 – Il database Il database è in formato Access, ed è composto da 3 tabelle. La prima è costituita da due campi e contiene gli username e le password degli utenti autorizzati all’accesso. Le altre due hanno la stessa struttura, con 5 campi: l’anno di emissione e il numero, che insieme costituiscono la chiave primaria, il titolo della circolare, una breve descrizione e l’indirizzo dove è possibile leggere per intero la circolare in formato PDF; esse contengono, l’una le circolari del Dipartimento Bilancio e Tesoro, l’altra quelle del Dipartimento Finanze e Credito. 3.2 – La struttura ad albero La struttura delle pagine (Fig.2) prevede una pagina iniziale in cui autenticarsi, che permette l’accesso ad una pagina di scelta, in cui è possibile decidere quale operazione si vuole effettuare, tra inserimento, cancellazione e modifica. Al termine delle operazioni è opportuno effettuare il logout per uscire dall’area riservata. Login.html Login.asp Sessione Scelta.asp Inserisci.asp Cancella.asp Modifica.asp ModCerca.asp Inserimento.asp CanCerca.asp Elimina.asp ModificaDati.asp ModificaEff.asp Logout.asp Fig.2 - Struttura ad albero Per lo sviluppo vero e proprio delle pagine il lavoro è stato suddiviso: io mi sono occupato della creazione delle pagine per la modifica, il mio collega di quelle per l’inserimento e la cancellazione. 4 – Funzionamento delle pagine 4.1 – Login La pagina di login è la prima che si presenta all’utente che vuole interagire con il database. 4.1.1 –login.html Questa è una semplice pagina HTML che contiene due form nei quali l’utente che si vuole autenticare deve inserire il proprio username e la password. 4.1.2 – login.asp Questa pagina ASP preleva i dati dai form della pagina precedente assegnando il loro valore a delle variabili. Per controllare se l’username e la password inseriti sono corretti, l’applicazione apre una connessione con il database (“Database Circolari.mdb”) ed in particolare con la tabella “UserPw” e per ogni record confronta le due variabili con i valori dei campi del database cercando il record in cui sia l’username sia la password corrispondano con quelli inseriti dall’utente. Se non viene trovato il record cercato viene visualizzato un messaggio di errore e nuovamente i due form per consentire il reinserimento. Se invece viene trovato il record, per prima cosa viene aperta una sessione contente i valori di UserName e Password, che rimarrà aperta fino all’operazione di logout; da questo momento in poi all’apertura di ogni pagina dell’area riservata verrà controllato che le variabili della sessione siano state inizializzate, per assicurarsi che solo attraverso la pagina di login è possibile accedere alle pagine riservate. 4.1.3 – errore.asp Questa pagina (Fig.3) viene visualizzata soltanto nel caso in cui, conoscendo l’URL di una delle pagine riservate, si tenti di accedervi senza effettuare il login; se al momento del controllo le variabili della sessione non risultano inizializzate, viene eseguito un reindirizzamento verso questa pagina che contiene un messaggio di errore e i due form. 4.1.4 – logout.asp In questa pagina, alla quale si può accedere cliccando sul pulsante Logout presente in ognuna delle pagine dell’area riservata, viene effettuata l’operazione “Session.abandon” con la quale si termina la sesisone. La pagina contiene anche un pulsante per tornare alla pagina di login. 4.2 – Scelta Da questa pagina è possibile accedere alle tre diverse funzioni del sistema; è infatti presente un pulsante per accedere all’area in cui è possibile inserire nuovi dati, uno per l’area di modifica e uno per l’area di cancellazione. Io mi sono occupato dello sviluppo delle pagine relative alla parte di modifica dei dati riguardanti circolari già presenti nel database. Fig.3 – Errore.asp 4.3 – Modifica L’operazione di modifica dà la possibilità di cambiare uno o più dati relativi ad una circolare precedentemente inserita. Per fare questo ho creato 4 pagine. 4.3.1 – modifica.asp In questa pagina (Fig. 4) vengono visualizzate in una tabella le circolari dell’anno in corso del Dipartimento Bilancio e Tesoro; in alto è presente un link ad una sua pagina gemella (“modifica2.asp”) che si riferisce all’altra tabella del database contenente le circolari del Dipartimento Finanze e Credito. Per ogni circolare sono elencati l’anno, il numero e il titolo, che è anche un link alla circolare stessa in formato PDF per chi volesse consultarla prima di modificarla; in ogni riga compare un pulsante “modifica”, che porta alla pagina di modifica vera e propria. E’ importante notare che i valori di anno e numero visualizzati all’interno della tabella sono contenuti anche all’interno di due tag input di tipo “hidden” in un form i cui valori saranno passati alla pagina “modificaDati.asp”. Inoltre viene salvata una variabile “tabella” in oggetto “Session” che contiene il nome della tabella sulla quale si vuole operare. In questa pagina è inoltre possibile effettuare una ricerca tra tutte le circolari, grazie ad una sorta di motore di ricerca che ho posizionato sotto la tabella; è possibile ricercare le circolari o per anno o per numero o per parola chiave. Il motore di ricerca non è altro che un form composto da due tag “select” per l’anno e il numero e da un tag “input” per inserire la parola chiave; i due menù a tendina interagiscono tra di loro dinamicamente; infatti, quando si sceglie un anno dal primo menù a tendina, viene chiamata una funzione JAVASCRIPT, che richiamando la stessa pagina ASP con il valore dell’anno scelto, fa sì che nel secondo menù a tendina compaiano come possibili numeri da scegliere solo quelli delle circolari di quell’anno; lo stesso avviene scegliendo prima un numero. Fig. 4 – modifica.asp 4.3.2 – modCerca.asp In questa pagina vengono prelevati i valori del form del motore di ricerca, e viene interrogato il database secondo i dati inseriti. La ricerca funziona anche nel caso in cui non vengano compilati tutti i campi di ricerca; infatti, in questo caso, il motore di ricerca prenderà tutti i possibili valori del campo non compilato. Per quanto riguarda la ricerca per parola chiave verranno visualizzate tutte quelle circolari che contengono in un qualsiasi punto o del titolo o della descrizione la parola o le parole inserite. Viene visualizzato un messaggio che informa l’utente circa il numero di circolari trovate e una tabella dello stesso tipo di quella della pagina precedente contenente le informazioni relative alle circolari trovate. 4.3.3 – modificaDati.asp Questa è la pagina di modifica vera e propria (Fig. 5), vengono infatti visualizzati 5 campi contenuti all’interno di un form, che contengono come valori di default i dati, relativi alla circolare scelta, già presenti nel database. L’utente può quindi modificarne uno o più e cliccare sul pulsante per effettuare la modifica; prima di reindirizzare l’utente alla pagina di aggiornamento del database il sistema chiede conferma tramite uno script. Ho inoltre previsto un controllo tramite funzioni JAVASCRIPT, per essere certi che tutti i campi siano stati compilati e che il formato di anno e numero sia valido. Fig. 5 – modificaDati.asp 4.3.4 – modificaEff.asp Questa pagina preleva tutti i valori contenuti nel form della pagina “modificaDati.asp” e dopo aver cancellato il record esistente relativo alla circolare da modificare ne crea uno nuovo con i dati modificati. Per ottenere questo risultato è stato necessario memorizzare i vecchi valori di anno e numero all’interno di una sessione; questa operazione ha una doppia utilità: da una parte serve per trovare con un’interrogazione al database il record da modificare, dall’altra per controllare che sia rispettata l’univocità della coppia anno-numero, chiave primaria della tabella; i valori di anno e numero da inserire nel database devono essere o del tutto nuovi o gli stessi che erano contenuti in precedenza nel record che si sta modificando. A questo scopo vengono quindi aperti due recordset relativi alla tabella scelta, il cui nome è stato precedentemente memorizzato nella sessione; in uno dei due come detto viene caricato il record da modificare, nell’altro viene cercato un record che abbia i valori di anno e numero uguali a quelli appena inseriti, l’operazione di modifica viene quindi completata se questo secondo recordset è vuoto oppure se viene trovata come unica circolare quella che si è deciso di modificare.