Realizzazione di una base di dati per la gestione delle valutazioni di progetti di ricerca

481
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
481
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Realizzazione di una base di dati per la gestione delle valutazioni di progetti di ricerca

  1. 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA CORSO DI LAUREA TRIENNALE IN INGEGNERIA DELLINFORMAZIONE CURRICULUM INFORMATICA REALIZZAZIONE DI UNA BASE DI DATI PER LA GESTIONE DELLE VALUTAZIONI DI PROGETTI DI RICERCALaureando: Relatore:EFREM VENTURUZZO CHIAR.MO PROF. MAURIZIO FERMEGLIA ANNO ACCADEMICO 2011/2012
  2. 2. INDICE DEI CONTENUTICAPITOLO 1 INTRODUZIONE 4CAPITOLO 2 ANALISI 6 2.1 Intervista al committente 6 2.2 Analisi del sistema 6 2.3 Analisi dettagliata del caso d’uso del tesista 10 2.4 Analisi del caso d’uso Upload Valutazione 11CAPITOLO 3 PROGETTAZIONE 12 3.1 Progettazione del Database 12 3.2 Progettazione della Web Application 15 3.2.1 Progettazione inserimento progetti 15 3.2.2 Progettazione upload valutazioni 17 3.2.3 Struttura finale 18CAPITOLO 4 REALIZZAZIONE 19 4.1 Realizzazione Database 19 4.2 Realizzazione Web Application 22 4.2.1 Data Binding 22 2
  3. 3. 4.2.2 Login 22 4.2.3 Nuovo Progetto 24 4.2.4 Keywords 27 4.2.5 Upload main document 29 4.2.6 Upload supplementary document 32 4.2.7 Riepilogo Dati 36 4.2.8 Upload valutazioni 39CAPITOLO 5 CONCLUSIONI 43 BIBLIOGRAFIA 44 3
  4. 4. CAPITOLO 1IntroduzioneLo scopo di questa tesi è la creazione di una base di dati e di un’applicazione web per la gestionedei progetti di ricerca e delle relative valutazioni.In particolare si vuole fornire al tesista la capacità di inserire i dati relativi al proprio progetto e dieffettuare l’upload dei relativi documenti e ai revisori la possibilità di gestire l’upload dellevalutazioni dei progetti che hanno accettato di revisionare.Il sistema è stato progettato per un utilizzo da parte dell’ambiente universitario.Nei capitoli successivi si mostrerà in dettaglio come è stato implementato il sistema:  Nel capitolo dedicato all’analisi si tratteranno gli argomenti relativi all’analisi dei requisiti, della situazione iniziale e di definire le basi di un sistema informativo che sarà, una volta completato, più ampio e completo di quello realizzato;  In progettazione si esamineranno: o gli schemi relativi al database e la documentazione associata; o la struttura dell’applicazione web;  Infine nel capitolo realizzazione si vedrà il codice dell’applicazione web in dettaglio.In questa tesi si userà il termine generico “progetto” per indicare svariate tipologie di progettocome tesi, tesi di dottorato, progetti di ricerca.La creazione di questo sistema è stata motivata dalla necessità di amministrare in maniera piùsemplice e completa le diverse fasi che portano alla valutazione dei progetti dal punto di vista deitesisti, dei revisori e da quello dell’editore.I vincoli progettuali sono rappresentati dall’utilizzo delle tecnologie .NET, del linguaggio diprogrammazione C# e del linguaggio di markup HTML5. 4
  5. 5. Per la realizzazione del database è stato richiesto di usare SQL Server 2008 per garantire lamassima compatibilità, in quanto questo è già usato all’interno dell’ambiente come data basemanagement system.Tutti i moduli software di questo documento sono stati sviluppati dall’autore.Gli obiettivi della realizzazione sono:  Analizzare i requisiti da parte del committente;  Analizzare la struttura del sistema informativo;  Analizzare e progettare la base dati;  Studiare le tecnologie .NET, ASP.NET, C#, e HTML5;  Studiare le iterazioni fra base dati ed applicazione;  Realizzare il database;  Implementare i casi d’uso del tesista;  Implementare il caso d’uso “Upload valutazione” del revisore. 5
  6. 6. CAPITOLO 2Analisi2.1 Intervista al committenteLa prima fondamentale informazione che deriva dall’intervista è la mancanza di un sistemapreesistente da implementare. Perciò si dovrà creare il sistema dall’origine.Le richieste del committente sono:  Realizzazione di una base dati  Realizzazione di un’applicazione web che permetta ai tesisti di inserire i dati relativi ai propri progetti nella base dati e l’upload dei documenti;  Realizzazione di un’applicazione web che permetta ai revisori di compiere operazioni quali decidere se accettare o rifiutare un progetto, effettuare il download dei documenti da revisionare e gestire l’upload delle valutazioni.  Il committente svolgerà il ruolo di editore-amministratore ed accederà ai dati direttamente con l’ausilio di software come Microsoft Access.  Tutti i dati relativi ai tesisti ed agli editori vengono precedentemente caricati dall’editore stesso.2.2 Analisi del sistemaGli attori fondamentali del sistema sono tre:  Tesista;  Editore;  Revisore. 6
  7. 7. Sistema Tesista Web Application Database Revisore Editore Il tesista accederà al sistema esclusivamente per inserire i dati del proprio progetto ed i relativi documenti. Inserisci Progetto Tesista Il revisore compie invece diverse azioni: 1. Accetta o rifiuta una revisione: a seguito della sua assegnazione da parte dell’editore ad un progetto da revisionare può decidere se accettare il compito o rifiutare; 2. Download documenti: per ogni progetto accettato deve poter effettuare il download dei relativi documenti in un qualsiasi momento; 3. Upload della valutazione. accetta/rifiuta revisione download documenti da revisionare Revisore Upload valutazioneI casi d’uso dell’editore sono vari, in particolar modo si mettono in risalto i principali come: 7
  8. 8. 1. Visualizzare i dati per evento: ogni progetto ha una data di consegna, di scadenza di revisione e di scadenza finale. Tali date variano in base all’evento/tipologia di progetto specifico; 2. Assegnare revisore al progetto; 3. Elaborare valutazioni: accedere ai documenti delle valutazioni per esprimere il giudizio finale. Visualizza Progetti per Evento assegna revisore a progetto Editore Elabora ValutazioniSi ricorda che l’editore funge anche da amministratore e ha accesso diretto ai dati. Ciò comporta,in prima analisi, una non necessità d’implementazione dei relativi casi d’uso attraversoapplicazioni dedicate. In un secondo momento si potrà passare alla realizzazione di strumenti attia supportare le attività dell’editore.Il diagramma delle attività del sistema è il seguente:FASE 1: è la fase dedicata al Tesista, il quale, dopo aver inserito i dati del nuovo progetto, noncompie altre azioni.FASE 2: l’editore visualizza i progetti in scadenza, richiede una lista dei revisori, anche in base acerti specifici parametri, ed assegna ai revisori i progetti.FASE 3: Il revisore valuta se accettare o rifiutare un progetto ed eventualmente effettua l’uploaddella valutazione. 8
  9. 9. TESISTA AMMINISTRATORE REVISORE DATABASE FASE 1CARICAMENTO DATI PROGETTO INSERISCI PROGETTO FASE 2 RICHIESTA PROGETTI IN SCADENZA TORNA LISTA PROGETTI IN SCADENZA VISUALIZZA PROGETTI RICHIESTA REVISORI TORNA LISTA REVISORI VISUALIZZA REVISORI ASSEGNA REVISORE A PROGETTO CAMBIA STATO REVISORE FASE 3 ACCETTA PROGETTO? SI NO CAMBIA STATO REVISORE CAMBIA STATO REVISORE RICHIESTA PROGETTO RESTITUISCI PROGETTO COMPILAZIONE VALUTAZIONE INSERISCI VALUTAZIONE 9
  10. 10. 2.3 Analisi dettagliata del caso d’uso del tesistaIl principale caso d’uso è quello che porta all’inserimento di un nuovo progetto da parte deltesista.Il diagramma di sequenza mette in risalto le quattro attività principali: 1. Effettuare il login; 2. Inserire i dati caratteristici di un progetto; 3. Eseguire l’upload dei documenti; 4. Realizzare il controllo finale su tutti i dati e confermare gli stessi. Tesista Sistema Login-Nome Utente e password Visualizza pagina inserimento dati progetto Dati progetto Visualizza pagina upload documenti Upload documenti Visualizza pagina riepilogo Conferma dati Visualizza HomePage 10
  11. 11. 2.4 Analisi del caso d’uso Upload ValutazioneUno dei casi d’uso del revisore è quello relativo all’upload delle valutazioni.Il revisore deve accedere al sistema con le proprie credenziali, specificare un progetto diriferimento ed effettuare l’upload della corrispettiva valutazione. Revisore Sistema Login-Nome Utente e password Visualizza pagina inserimento valutazione Upload Valutazione Conferma avvenuta operazioneCome parte di questa tesi si è realizzato il caso d’uso del tesista e quello relativo all’upload dellavalutazione da parte del revisore. 11
  12. 12. CAPITOLO 3Progettazione3.1 Progettazione del DatabaseIn seguito alle informazioni ricavate con l’intervista al committente ed all’analisi delle stesse, èstato redatto lo schema concettuale.I vincoli non esprimibili sono:  Entità “Tipo evento”: “data fine” deve essere maggiore o uguale a “data inizio”;  Entità “Tipo evento”: “scadenza revisione” deve essere maggiore o uguale a “data fine”;  Entità “Tipo evento”: “scadenza “deve essere maggiore o uguale a “scadenza revisione”;Si mette in evidenza l’analisi dei principali elementi appartenenti allo schema concettuale PROGETTO Id Progetto Identificatore univoco numerico del progetto Titolo Titolo del progetto Supervisore Supervisore del progetto Sommario Essenziale sommario dei capitoli TIPO EVENTO Id Evento Identificatore univoco numerico dellevento Nome Nome dellevento Data Inizio Data iniziale di possibile consegna dei progetti Data Fine Data ultima di consegna dei progetti Scadenza Revisione Data ultima di consegna valutazioni da parte dei revisori Scadenza Data ultima di completamento iter di valutazione del progetto 12
  13. 13. DOCUMENTO Id Documento Identificatore univoco numerico del documento Documento Titolo del documento con estensione Tipo del documento: main document(obbligatorio e unico) o supplementary(facoltativo e Tipo Documento può essere più di uno) REVISOREId Revisore Identificatore univoco numerico del revisore Nome Nome revisore Cognome Cognome revisore Telefono Recapito telefonico del revisore Email Indirizzo email del revisoreCredenziali Credenziali daccesso del revisore composte da nome utente e password TESISTAId Tesista Identificatore univoco numerico del tesista Nome Nome tesistaCognome Cognome tesistaCredenziali Credenziali daccesso del revisore composte da nome utente e password VALUTAZIONE è il collegamento tra lentità progetto con lentità revisore MOLTI A MOLTI: un progetto ha tipicamente più valutazioni fornite da diversi CARDINALITÀ revisori; i revisori valutano più progetti STATO Stato dellassociazione fra progetto e revisore VALUTAZIONE Titolo del documento con estensione 13
  14. 14. 14
  15. 15. I dati di carico evidenziano una quantità stimata di 300 progetti all’anno, per ognuno dei quali ci siaspetta all’incirca 3 valutazioni, per un totale di 900 valutazioni. Considerando una mediasovrastimata di 3 documenti per progetto ci si aspetta 900 documenti annui. Ad ogni progetto siassociano 5 keyword, scelte da una lista di 50 elementi, per un totale di 1500 coppie progetto-parola. Ci si aspetta un centinaio di revisori, mentre le entità che completano le caratteristiche delprogetto si attestano attorno a qualche decina di elementi.Il totale dei volumi è quindi molto modesto per un DBMS come sql server 2008, progettato pergestire centinai di migliaia di record; non è quindi necessaria alcuna modifica dello schema a finiprestazionali.3.2 Progettazione della Web Application3.2.1 Progettazione inserimento progettiCon riferimento all’analisi del caso d’uso del tesista (capitolo 2.3), è stata progettata una strutturaa cinque livelli: LOGIN INSERIMENTO DATI UPLOAD MAIN DOCUMENT INSERIMENTO KEYWORDS UPLOAD SUPPLEMENTARY UPLOAD DOCUMENT DOCUMENTI RIEPILOGOIl livello “upload documenti” è suddiviso in due parti in modo da facilitare la distinzione fra i duetipi di documento previsti in fase di analisi. 15
  16. 16. Per quanto riguarda i singoli elementi si è preso spunto da un software in uso al committente,ScholarOne Manuscripts v4.10.0. La struttura è sostanzialmente la medesima ed i campi richiestidal software sono essenzialmente gli stessi richiesti dall’applicazione web in progetto.  Inserimento datiTutti gli attributi del progetto verranno inseriti da un unico form: titolo, supervisore, sommario,tipo progetto, evento, ERC, area. Non sono d’interesse per l’applicazione i campi Special Issue eCopyright.  Inserimento keywords 16
  17. 17. La seconda videata sarà simile a quella del software in esame.  Upload documentiL’upload del main document, documento obbligatorio ed unico, viene diviso da quelli di possibilialtri documenti al fine di ridurre il rischio di errori in upload da parte dell’utente.3.2.2 Progettazione upload valutazioniAnche il revisore dovrà accedere attraverso una pagina di login prima di poter gestire levalutazioni. 17
  18. 18. LOGIN UPLOAD VALUTAZIONEIl revisore dovrà solamente definire di quale progetto ha effettuato la revisione e selezionare il filedi cui fare l’upload.3.2.3 Struttura finale LOGIN INSERIMENTO UPLOAD DATI VALUTAZIONE INSERIMENTO KEYWORDS UPLOAD MAIN DOCUMENT UPLOAD SUPPLEMENTARY DOCUMENT RIEPILOGO 18
  19. 19. CAPITOLO 4Realizzazione4.1 Realizzazione DatabaseIl database che è stato realizzato è composto da diciassette tabelle, quattro viste e cinque storedprocedure.Le viste che sono state implementate sono:  ViewParola: visualizza il codice identificativo dei progetti e le parole associate ordinate per Id di progetto crescente. La vista è implementata sulle tabelle TblParola e TblKeyword;  ViewProgettoDati: mostra tutti i dati di tutti i progetti presenti nella TblProgetto, sostituendo le chiavi esterne numeriche con i rispettivi valori riferiti, ed il loro stato. Oltre alla già citata TblProgetto, riporta dati delle TblArea, TblERC, TblTipoEvento, TblTipo, TblStato e TblStatoProgetto;  ViewRevisoreTOT: visualizza i dati dei revisori, escluso le loro credenziali. Si riferisce alla TblRevisore ed è utile per accedere facilmente ai recapiti dei revisori;  ViewStatoProgetto: mostra Id progetto, titolo del progetto ed il rispettivo stato progetto. Rappresenta informazioni appartenenti a TblProgetto,TblStatoProgetto e TblStato.Le stored procedure:  Sp_NuovoProgetto: permette l’inserimento di una nuova riga nella TblProgetto attraverso il passaggio di alcuni parametri; Exec Sp_NuovoProgetto @titolo=progettazione di una base dati per una palestra, @supervisore=marco fetto, @area=1, @erc=1, @tipoprogetto=2, @evento=6, @sommario=1)introduzione 2)progettazione 3)realizzazione  StatoAccettaProgettoDaValutare e StatoRifiutaProgettoDaValutare settano lo stato della valutazione rispettivamente a 2 ed a 3, pari ad accettato ed a rifiutato, prendendo come input gli identificatori del progetto e del revisore a cui si riferiscono; Exec StatoAccettaProgettoDaValutare @Progetto=34, @Revisore=5 19
  20. 20.  TitoloDaIdProgetto: visualizza tutti i dati presenti nella TblProgetto per il progetto avente come Id quello inserito come input; Exec TitoloDaIdProgetto 4  Sp_Evento: mostra tutti i progetti che fanno parte di uno specifico evento passato come parametro d’input. USE [GestioneProgetti] GO create Procedure [dbo].[Sp_Evento] @evento int AS Select * FROM [dbo].[TblProgetto] WHERE Evento=@evento GO EXEC SP_Evento XÉ stato implementato il cascade delete per l’entità tesista, revisore e progetto al fine disemplificare la gestione ed il mantenimento dei dati.Il diagramma descrive la struttura della base dati, le chiavi primarie e le chiavi esterne. 20
  21. 21. 21
  22. 22. 4.2 Realizzazione Web Application4.2.1 Data BindingLo scambio di dati fra l’applicazione e il database avviene con l’utilizzo di una connessione definitadalla stringa:<add name="GestioneProgettiConnectionString" connectionString="Data Source=name_server;Initial Catalog=GestioneProgetti;Integrated Security=True; MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" />Quando il sistema verrà installato nell’ambiente in cui dovrà operare sarà necessario modificarequesta stringa con i parametri adeguati.4.2.2 Login 22
  23. 23. Si è realizzata un’unica pagina di login divisa in due parti, la parte superiore dedica ai tesisti equella inferiore ai revisori.Nel caso in cui le credenziali siano errate una stringa di testo notificherà l’errore.In entrambi i casi l’interfaccia e l’implementazione sono le medesime. Vi sono due textbox perl’inserimento dei propri dati, una label per stampare a video l’eventuale stringa d’errore ed unbottone per far eseguire le operazioni.protected void Button1_Click(object sender, EventArgs e)Si definisce e si esegue una select sulla tabella contenente le credenziali dell’attore di riferimento.SqlCommand CheckTes = new SqlCommand("select IdTesista from TblTesista whereNomeUtente=@user AND Password=@Pass",connection1);CheckTes.Parameters.AddWithValue("user", TextBox1.Text);CheckTes.Parameters.AddWithValue("pass", TextBox2.Text);connection1.Open();SqlDataReader rd = CheckTes.ExecuteReader();Il risultato viene memorizzato in un data reader; se questo è vuoto vuol dire che non vi è alcunacorrispondenza per le credenziali inserite, altrimenti viene letto il valore contenuto checorrisponde proprio all’id dell’utente. In quest’ultimo caso si effettua la redirect alla paginasuccessiva e si passa il numero identificativo. if(rd.HasRows) { rd.Read(); rd.Close(); String IdTes = (String)CheckTes.ExecuteScalar(); Response.Redirect("NewProgetto.aspx?IDT="+IdTes); } else { Label1.Text="Username e/o Password errate"; } connection1.Close();Il passaggio dell’identificatore dell’utente avviene mediante l’espressione url?variabile=valore 23
  24. 24. 4.2.3 Nuovo ProgettoIl tesista può ora compilare questa web page composta da tre textbox, un bottone e quattrodropdowlist. Una volta inseriti i dati sarà sufficiente cliccare su “CONTINUA” per proseguire.La prima operazione compiuta è il popolamento delle dropdownlist.protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DDL1(); DDL2(); DDL3(); DDL4(); } }Il popolamento di ognuno di questi quattro elementi avviene nel medesimo modo: si effettua unaselect nella tabella di riferimento ed il risultato viene assegnato ad un data reader; il data readerdiventa la sorgente dati della dropdownlist. 24
  25. 25. Si noti come DropDownList1NP.DataTextField indichi l’elemento che verrà visualizzatonell’interfaccia, mentre DropDownList1NP.DataValueField esprime il valore associato alla stringamostrata. protected void DDL1() { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand cmdArea = new SqlCommand("SELECT * FROM [TblArea]",connection1); connection1.Open(); SqlDataReader dr; dr = cmdArea.ExecuteReader(); DropDownList1NP.DataSource = dr; DropDownList1NP.DataValueField = "IdArea"; DropDownList1NP.DataTextField = "Area"; DropDownList1NP.DataBind(); DropDownList1NP.Items.Insert(0, new ListItem("seleziona area", "-1")); connection1.Close(); cmdArea.Dispose(); }Cliccando il bottone viene eseguita una operazione d’insert nella TblProgetto utilizzando comeparametri i dati inseriti nei vari campi e, successivamente, esegue la funzione IDP. protected void Button1NP_Click(object sender, EventArgs e) { SqlConnection connection5 = new SqlConnection(); connection5.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand NewProgetto = new SqlCommand("Insert into TblProgetto (Titolo,Supervisore, Area, ERC, TipoProgetto,Evento,Sommario) VALUES (@t ,@sup, @area,@ERC,@TP,@Ev,@Som)", connection5); NewProgetto.Parameters.AddWithValue("area", DropDownList1NP.Text); NewProgetto.Parameters.AddWithValue("t", TextBox1NP.Text); NewProgetto.Parameters.AddWithValue("sup", TextBox2NP.Text); NewProgetto.Parameters.AddWithValue("Som", TextBox3NP.Text); NewProgetto.Parameters.AddWithValue("ERC", DropDownList2NP.Text); NewProgetto.Parameters.AddWithValue("TP", DropDownList3NP.Text); NewProgetto.Parameters.AddWithValue("Ev", DropDownList4NP.Text); connection5.Open(); NewProgetto.ExecuteNonQuery(); connection5.Close(); IDP(); } 25
  26. 26. In seguito all’operazione d’insert, viene creata una nuova riga di cui non si conosce il valore dellachiave primaria.Per individuare questo valore è stata sviluppata la funzione IDP:protected void IDP() { SqlConnection connection6 = new SqlConnection(); connection6.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand IdProg = new SqlCommand("Select IdProgetto from TblProgetto where(titolo like @t AND Area=@area AND Supervisore like @sup AND Sommario like @Som AND ERC=@ERCAND TipoProgetto=@TP AND Evento=@Ev) ORDER BY IdProgetto DESC", connection6); IdProg.Parameters.AddWithValue("t", TextBox1NP.Text); IdProg.Parameters.AddWithValue("area", DropDownList1NP.Text); IdProg.Parameters.AddWithValue("sup", TextBox2NP.Text); IdProg.Parameters.AddWithValue("Som", TextBox3NP.Text); IdProg.Parameters.AddWithValue("ERC", DropDownList2NP.Text); IdProg.Parameters.AddWithValue("TP", DropDownList3NP.Text); IdProg.Parameters.AddWithValue("Ev", DropDownList4NP.Text); connection6.Open(); Int32 Id = (Int32)IdProg.ExecuteScalar(); connection6.Close(); String IDT = Request.QueryString["IDT"]; Response.Redirect("KeywordPage.aspx?IDT=" + IDT + "&IDP=" + Id); }La funzione select sfrutta i parametri ancora presenti negli elementi dell’interfaccia peridentificare la riga corrispondente a quella appena inserita.È importante notare come la risposta non sia per forza un unico elemento, potrebbe contenereanche più di un codice identificativo. Ciò può accadere a seguito di un tentativo fallito inprecedenza dell’utente di inserire il medesimo progetto, se infatti un guasto non dovessepermettere all’utente di concludere tutte le operazioni necessarie per definire un progetto, comead esempio l’inserimento dei documenti, dovrà ricompilare il form provocando un doppione nellabase dati. Per ovviare a questo problema si ordinano gli elementi della select in manieradecrescente e si considera solo il primo elemento, così da restituire sempre l’ultimo Id.Infine viene eseguita una redirect avente come parametri i codici identificativi relativi al tesista e alprogetto. 26
  27. 27. 4.2.4 KeywordsL’interfaccia contiene due etichette che mettono in evidenza i codici del tesista e del progetto.L’utente selezionerà le parole chiave d’interesse e poi proseguirà con un click su “inserisci”.protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { DDL1K(); DDL2K(); DDL3K(); DDL4K(); DDL5K(); } String IDT = Request.QueryString["IDT"]; String IDP = Request.QueryString["IDP"]; Label1.Text = IDT; Label2.Text = IDP; }Il popolamento delle dropdownlist avviene come in precedenza ed è uguale per tutte e cinque. protected void DDL1K() { SqlConnection connection11 = new SqlConnection(); 27
  28. 28. connection11.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand cmdKW = new SqlCommand("SELECT * FROM [TblKeyword]", connection11); connection11.Open(); SqlDataReader dr; dr = cmdKW.ExecuteReader(); DropDownList1K.DataSource = dr; DropDownList1K.DataValueField = "IdWord"; DropDownList1K.DataTextField = "Parola"; DropDownList1K.DataBind(); DropDownList1K.Items.Insert(0,new ListItem("scegli una parola","-1")); connection11.Close(); cmdKW.Dispose(); }Allo scopo di ridurre la possibilità di errori è stato deciso di implementare l’inserimento dei daticon un’insert per ogni dropdownlist. A fini prestazionali questa decisione non è significativamentedannosa, infatti gli accessi avvengono in ogni caso in numero modesto, solo cinque, e su unaquantità di campi estremamente limitata, appena due. Vi è inoltre un’istruzione if per assicurarsiche siano state selezionate cinque parole diverse. protected void Button1_Click(object sender, EventArgs e) { if(DropDownList1K.Text!=DropDownList2K.Text &&DropDownList1K.Text!=DropDownList3K.Text && DropDownList1K.Text!=DropDownList4K.Text && DropDownList1K.Text!=DropDownList5K.Text &&DropDownList2K.Text!=DropDownList3K.Text && DropDownList2K.Text!=DropDownList4K.Text && DropDownList2K.Text!=DropDownList5K.Text &&DropDownList3K.Text!=DropDownList4K.Text && DropDownList3K.Text!=DropDownList5K.Text && DropDownList4K.Text!=DropDownList5K.Text) { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand CmdParola = new SqlCommand("INSERT INTO TblParola(Progetto, KeyWord)VALUES (@IDP,@KW)", connection1); CmdParola.Parameters.AddWithValue("IDP", Label2.Text); CmdParola.Parameters.AddWithValue("KW", DropDownList1K.Text); connection1.Open(); CmdParola.ExecuteNonQuery(); connection1.Close();... 28
  29. 29. Response.Redirect("UploadDoc.aspx?IDT=" + Label1.Text + "&IDP=" + Label2.Text); }Si può ora accedere alla sezione di upload documenti.4.2.5 Upload main documentLe operazioni che devono essere compiute al momento dell’upload documenti sono due:  L’inserimento dell’associazione progetto-documento sulla base dati;  L’upload effettivo del documento sul server.L’interfaccia è composta da due label per gli identificatori, un’etichetta per un messaggio d’errore,nel caso in cui si tentasse di effettuare un upload senza indicare alcun file, un bottone di upload edun elemento di input file.Il relativo codice HTML è contenuto nel file UploadDoc.aspx ed è qui riportato.<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadDoc.aspx.cs"Inherits="WebGestioneProgetti.UploadDoc" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>GESTIONEPROGETTI-UPLOADDOC</title> <style type="text/css"> #File1 { width: 328px; } .auto-style1 { color: #FF0000; } </style></head><body style="height: 618px"> <form id="Form2" method="post" enctype="multipart/form-data" runat="server"> <h1 class="auto-style1">DOCUMENTI</h1> <div style="height: 524px"> IDTesista: 29
  30. 30. <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDProgetto:&nbsp; <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <br /> <br /> <br /> MAIN DOCUMENT:&nbsp;&nbsp; <input type="file" id="File1" name="File1" runat="server"/>&nbsp;&nbsp;&nbsp; <input type="submit" id="Submit1" value="UPLOAD" runat="server" name="Submit1"/><br /> <br /> <br /> <asp:Label ID="Label3" runat="server"></asp:Label> </div> </form></body></html>Una volta selezionato il file è possibile premere il bottone “UPLOAD”. Si eseguirà così il seguentecodice C#:public partial class UploadDoc : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlInputFile File1; protected System.Web.UI.HtmlControls.HtmlInputButton Submit1; protected void Page_Load(object sender, EventArgs e) { String IDT = Request.QueryString["IDT"]; String IDP = Request.QueryString["IDP"]; Label1.Text = IDT; Label2.Text = IDP; } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // CODEGEN: This call is required by the ASP.NET Web Form Designer. InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { 30
  31. 31. this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Submit1_ServerClick(object sender, System.EventArgs e) { if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0)) { string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); fn = Label2.Text + "MD" + fn; string SaveLocation = Server.MapPath("MAINDOC") + "" + fn; try { File1.PostedFile.SaveAs(SaveLocation); //aggiorna il DB UPDB(); //prosegui Response.Redirect("UploadSupDoc.aspx?IDT=" + Label1.Text + "&IDP=" +Label2.Text); } catch (Exception ex) { Label3.Text="Error: " + ex.Message; } } else { Label3.Text="Seleziona un file"; } } //inserisce nella TblDocumento protected void UPDB() { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand InMDoc = new SqlCommand("Insert into TblDocumento(progetto,tipo,doc)Values (@pr ,1 , @doc)", connection1); string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); string Name = Label2.Text + "MD" + fn; InMDoc.Parameters.AddWithValue("pr", Label2.Text); InMDoc.Parameters.AddWithValue("doc", Name); try { connection1.Open(); InMDoc.ExecuteNonQuery(); connection1.Close(); } catch (Exception ex) { Label3.Text = "Error: " + ex.Message; } } 31
  32. 32. }La prima parte si occupa di definire il contenuto delle due label e di inizializzare gli elementi cheserviranno per eseguire le operazioni richieste.La parte centrale, private void Submit1_ServerClick(object sender, System.EventArgs e), dopo ilcontrollo sull’esistenza o meno di un file selezionato, si occupa dell’effettivo upload del file nelweb server dell’applicazione, più precisamente in una cartella denominata “MAINDOC”.È importante evidenziare che il nome del file viene modificato.Il nuovo nome sarà costituito dall’id del progetto, seguito dalla sigla MD (Main Document) edinfine dal nome originale del file. Tale accorgimento serve per evitare la possibile sovrascrittura didocumenti e per rendere più facile l’associazione degli stessi ai relativi progetti.Dopo aver inserito il file nel server viene chiamata la funzione UPDB che aggiornerà la base dati.La parte finale esegue un’insert nella tabella TblDocumento: inserisce il nome del file nella colonna“doc” e setta il tipo al valore corrispondente a main document della TblTipoDoc.4.2.6 Upload supplementary documentI supplementary document sono documenti non obbligatori che completano il documentoprincipale del progetto e possono essere tipicamente anche più d’uno.Con i documenti supplementari si conclude la fase di inserimento dati da parte dell’utente, sidefinisce il legame di autore fra tesista e progetto e si assegna lo stato progetto. 32
  33. 33. La struttura dell’interfaccia è molto simile a quella dedicata al documento principale, ma sidifferenzia per la presenza di due diversi bottoni.“UPLOAD” effettua l’aggiornamento della TblDocumento ed il caricamento dei file nel server.Non contiene alcuna redirect in quanto è necessario permettere l’upload di un numero di filesuperiore ad uno.Infatti dopo l’upload del primo file si notifica il successo dell’operazione e si offre la possibilità diripetere l’operazione. 33
  34. 34. Anche in quest’occasione i file cambiano nome con l’aggiunta alla denominazione originale delnumero identificativo di progetto e del suffisso SD (Supplementary Document). Questo tipo di filesaranno salvati nel folder “SUPPLEMENTARYDOC”.public partial class UploadSupDoc : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlInputFile File1; protected System.Web.UI.HtmlControls.HtmlInputButton Submit1; protected void Page_Load(object sender, EventArgs e) { String IDT = Request.QueryString["IDT"]; String IDP = Request.QueryString["IDP"]; Label1.Text = IDT; Label2.Text = IDP; } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // CODEGEN: This call is required by the ASP.NET Web Form Designer. InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Submit1_ServerClick(object sender, System.EventArgs e) { if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0)) { string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); fn = Label2.Text + "SD" + fn; string SaveLocation = Server.MapPath("SUPPLEMENTARYDOC") + "" + fn; try { 34
  35. 35. File1.PostedFile.SaveAs(SaveLocation); //aggiorna il DB UPDB(); Label3.Text = "Documento inserito"; } catch (Exception ex) { Label3.Text = "Error: " + ex.Message; } } else { Label3.Text = "Seleziona un file"; } } protected void FINE(object sender, EventArgs e) { //Assegna progetto-Tesista a TblAutore; stato progetto diventa "inserito nonassegnato" in TblStato; Redirect SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand Aut = new SqlCommand("Insert into TblAutore(progetto,tesista) Values(@pr ,@Tes)", connection1); Aut.Parameters.AddWithValue("pr", Label2.Text); Aut.Parameters.AddWithValue("Tes", Label1.Text); SqlCommand StPr = new SqlCommand("Insert into TblStato (progetto,avanzamento)Values (@prog ,1)", connection1); StPr.Parameters.AddWithValue("prog", Label2.Text); try { connection1.Open(); Aut.ExecuteNonQuery(); StPr.ExecuteNonQuery(); connection1.Close(); } catch (Exception ex) { Label3.Text = "Error: " + ex.Message; } Response.Redirect("DatiProg.aspx?IDT=" + Label1.Text + "&IDP=" + Label2.Text); } protected void UPDB() { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); string NameSupp = Label2.Text + "SD" + fn; SqlCommand InS1Doc = new SqlCommand("Insert into TblDocumento(progetto,tipo,doc)Values (@pr ,2 , @doc)", connection1); InS1Doc.Parameters.AddWithValue("pr", Label2.Text); InS1Doc.Parameters.AddWithValue("doc", NameSupp); 35
  36. 36. try { connection1.Open(); InS1Doc.ExecuteNonQuery(); connection1.Close(); } catch (Exception ex) { Label3.Text = "Error: " + ex.Message; } } }Con il tasto “FINE” si dà avvio a due insert, nella TblAutore e nella TblStato, per poi passareall’ultima schermata dedicata al tesista.4.2.7 Riepilogo DatiQuesta pagina web ha lo scopo di riepilogare all’utente tutti i dati che ha inserito, in modo daverificarli ed eventualmente eliminare il progetto e ripetere tutte le operazioni.I dati vengono rappresentati con l’ausilio di tre gridview. Il tasto “HOME” riporta l’utente allapagina di login, mentre “ELIMINA”, oltre a cancellare tutto ciò che riguarda il progetto, ridirezionail tesista alla pagina “Nuovo Progetto”. 36
  37. 37. Le gridview vengono popolate da delle select su due viste e su una tabella.protected void Page_Load(object sender, EventArgs e) { String IDT = Request.QueryString["IDT"]; String IDP = Request.QueryString["IDP"]; Label1.Text = IDT; Label2.Text = IDP; SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand DatiPro = new SqlCommand("select * from ViewProgettoDati whereIdProgetto=@IDP", connection1); DatiPro.Parameters.AddWithValue("IDP", Label2.Text); SqlCommand Parole = new SqlCommand("select Parola from ViewParola whereProgetto=@IDP", connection1); Parole.Parameters.AddWithValue("IDP", Label2.Text); SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento whereProgetto=@IDP", connection1); DocIns.Parameters.AddWithValue("IDP", Label2.Text); connection1.Open(); //carica dati su GridView1 SqlDataReader rd = DatiPro.ExecuteReader(); GridView1.DataSource = rd; GridView1.DataBind(); rd.Dispose(); //carica dati su GridView2 SqlDataReader rp = Parole.ExecuteReader(); GridView2.DataSource = rp; GridView2.DataBind(); rp.Dispose(); //carica dati su GridView3 SqlDataReader rdoc = DocIns.ExecuteReader(); GridView3.DataSource = rdoc; GridView3.DataBind(); rdoc.Dispose(); connection1.Close(); }Il tasto “HOME” protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("Login.aspx"); }L’elemento “ELIMINA” deve cancellare i file memorizzati ed eliminare tutti i dati relativi alprogetto dalla base dati.Si utilizza una select sulla TblDocumento per estrarre i nomi dei documenti relativi ad un progetto.I documenti sono in folder diversi, uno in MAINDOC ed uno, più d’uno o nessuno inSUPPLEMENTARYDOC. 37
  38. 38. In ogni caso il primo documento estratto dalla select sarà un maindoc, i successivi saranno dieventuali file aggiuntivi.Sulla base dati agirà una semplice operazione di delete.protected void Button2_Click(object sender, EventArgs e) { SqlConnection connection = new SqlConnection(); connection.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; //elimina documento sul server SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento whereProgetto=@IDP", connection); DocIns.Parameters.AddWithValue("IDP", Label2.Text); connection.Open(); SqlDataReader rdoc = DocIns.ExecuteReader(); rdoc.Read(); string name = rdoc.GetString(0); string Fpath = Server.MapPath("MAINDOC") + "" + name; File.Delete(Fpath); while (rdoc.Read()) { name= rdoc.GetString(0); Fpath = Server.MapPath("SUPPLEMENTARYDOC") + "" + name; File.Delete(Fpath); } connection.Close(); //elimina progetto dal database SqlCommand DeletePr = new SqlCommand("DELETE FROM TblProgetto whereIdProgetto=@IDP", connection); DeletePr.Parameters.AddWithValue("IDP", Label2.Text); connection.Open(); DeletePr.ExecuteNonQuery(); connection.Close(); Response.Redirect("NewProgetto.aspx?IDT="+Label1.Text); } 38
  39. 39. 4.2.8 Upload valutazioniIl revisore, dopo aver effettuato il login, accede alla schermata di upload delle valutazioni.Il codice identificativo del revisore è inserito automaticamente a seguito dell’operazione di login.protected void Button2_Click(object sender, EventArgs e) { SqlConnection connection2 = new SqlConnection(); connection2.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand CheckRVS = new SqlCommand("select Revisore from TblCredenzialiRVSwhere NomeUtente=@user AND Password=@Pass",connection2); CheckRVS.Parameters.AddWithValue("user", TextBox3.Text); CheckRVS.Parameters.AddWithValue("pass", TextBox4.Text); connection2.Open(); SqlDataReader RV= CheckRVS.ExecuteReader(); if(RV.HasRows) { RV.Read(); RV.Close(); Int32 IdRVS = (Int32) CheckRVS.ExecuteScalar(); Response.Redirect("UploadValutazione.aspx?IDR="+IdRVS); } else { Label2.Text="Username e/o Password errate"; } connection2.Close(); } 39
  40. 40. Il revisore deve indicare l’id del progetto di cui inserirà la valutazione e selezionare il file,dopodiché sarà sufficiente cliccare “UPLOAD”.Il documento, caricato sul server, cambierà nome nella forma:IdRevisore+”P”+IdProgetto+”VAL”+nome_file. 40
  41. 41. Vi sarà una notifica dell’operazione avvenuta e sarà possibile effettuare un altro upload o tornarealla home page.A livello implementativo il funzionamento è il medesimo di quello che è stato attuato per idocumenti dei progetti, ad esclusione della parte riguardante la base dati. Infatti nellaTblValutazione vi è già l’associazione progetto-revisore, ma il suo stato è”accettato non valutato” ed il campo “valutazione” è settato a NULL.È stata definita un’operazione di update che porta al cambiamento di stato ed all’inserimento delnome della valutazione.private void Submit1_ServerClick(object sender, System.EventArgs e) { if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0)) { string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); //IdRevisore+P+IdProgetto+VAL+nomefile fn = Label1.Text +"P"+TextBox1V.Text+"VAL" + fn; string SaveLocation = Server.MapPath("VALUTAZIONI") + "" + fn; try { File1.PostedFile.SaveAs(SaveLocation); //aggiorna il DB UPDB(); Label2.Text = "Valutazione inserita"; } catch (Exception ex) { Label2.Text = "Error: " + ex.Message; } 41
  42. 42. } else { Label2.Text = "Seleziona un file"; } } protected void UPDB () { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;InitialCatalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;ApplicationName=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand UploadVal = new SqlCommand("UPDATE TblValutazione SET stato=4,Valutazione=@name WHERE (progetto=@pr AND revisore=@rvs)",connection1); string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); //IdRevisore+P+IdProgetto+VAL+nomefile string Val = Label1.Text + "P" + TextBox1V.Text + "VAL" + fn; UploadVal.Parameters.AddWithValue("name",Val); UploadVal.Parameters.AddWithValue("pr", TextBox1V.Text); UploadVal.Parameters.AddWithValue("rvs", Label1.Text); try { connection1.Open(); UploadVal.ExecuteNonQuery(); connection1.Close(); } catch (Exception ex) { Label2.Text = "Error: " + ex.Message; } } protected void FINE(object sender, EventArgs e) { Response.Redirect("Login.aspx"); } 42
  43. 43. CAPITOLO 5ConclusioniGli obiettivi prefissati sono stati raggiunti con l’implementazione dei seguenti elementi:  Database del sistema  Tesista: Inserimento progetti  Revisore: Upload valutazioniInoltre è stata sviluppata un’analisi del sistema e delle funzionalità della base dati tali da facilitareil futuro completamento e sviluppo del sistema stesso.Sono state acquisite nuove conoscenze ed approfondite altre, riguardanti in particolare:  L’utilizzo di SQL SERVER 2008 e del linguaggio SQL  Sviluppo di applicazioni ASP.NET  Uso di strumenti quali Visual Studio 2012  C# e HTMLI possibili sviluppi del sistema sono:  miglioramento del front end;  estensione delle funzionalità del revisore;  permettere al tesista di visionare lo stato del proprio progetto;  creare applicazioni di supporto all’attività del revisore.Allo stato attuale il sistema deve essere testato nell’ambiente in cui dovrà operare.L’autore ha prodotto un database con 17 tabelle, 4 viste e 5 stored procedure e scritto250 righe di html e 800 righe di codice C#. 43
  44. 44. BIBLIOGRAFIA  http://msdn.microsoft.com/it-it/library/ee532866.aspx  http://msdn.microsoft.com/it-it/library/aa139615.aspx  Mike Hotek , SQL Server 2008 passo per passo, Mondadori  http://msdn.microsoft.com/it-it/library/ms130214(v=sql.100).aspx  http://msdn.microsoft.com/it-it/library/bb510741.aspx  http://msdn.microsoft.com/library/dd831853.aspx 44

×