SlideShare ist ein Scribd-Unternehmen logo
1 von 44
Downloaden Sie, um offline zu lesen
UNIVERSITÀ DEGLI STUDI DI TRIESTE
              DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA

       CORSO DI LAUREA TRIENNALE IN INGEGNERIA DELL'INFORMAZIONE

                       CURRICULUM INFORMATICA




 REALIZZAZIONE DI UNA BASE DI DATI PER LA GESTIONE
        DELLE VALUTAZIONI DI PROGETTI DI RICERCA




Laureando:                          Relatore:

EFREM VENTURUZZO                   CHIAR.MO PROF. MAURIZIO FERMEGLIA




                     ANNO ACCADEMICO 2011/2012
INDICE DEI CONTENUTI

CAPITOLO 1      INTRODUZIONE                                      4



CAPITOLO 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     11



CAPITOLO 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                      18




CAPITOLO 4      REALIZZAZIONE                                     19

                4.1 Realizzazione Database                        19

                4.2 Realizzazione Web Application                 22

                      4.2.1 Data Binding                          22

                          2
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              39



CAPITOLO 5   CONCLUSIONI                               43

             BIBLIOGRAFIA                              44




                     3
CAPITOLO 1

Introduzione
Lo scopo di questa tesi è la creazione di una base di dati e di un’applicazione web per la gestione
dei 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 di
effettuare l’upload dei relativi documenti e ai revisori la possibilità di gestire l’upload delle
valutazioni 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 progetto
come 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 dei
tesisti, dei revisori e da quello dell’editore.

I vincoli progettuali sono rappresentati dall’utilizzo delle tecnologie .NET, del linguaggio di
programmazione C# e del linguaggio di markup HTML5.




                                                        4
Per la realizzazione del database è stato richiesto di usare SQL Server 2008 per garantire la
massima compatibilità, in quanto questo è già usato all’interno dell’ambiente come data base
management 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
CAPITOLO 2

Analisi
2.1 Intervista al committente

La prima fondamentale informazione che deriva dall’intervista è la mancanza di un sistema
preesistente 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 sistema

Gli attori fondamentali del sistema sono tre:

          Tesista;
          Editore;

        Revisore.




                                                  6
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 valutazione




I casi d’uso dell’editore sono vari, in particolar modo si mettono in risalto i principali come:




                                                              7
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 Valutazioni




Si 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 attraverso
applicazioni dedicate. In un secondo momento si potrà passare alla realizzazione di strumenti atti
a 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, non
compie altre azioni.

FASE 2: l’editore visualizza i progetti in scadenza, richiede una lista dei revisori, anche in base a
certi specifici parametri, ed assegna ai revisori i progetti.

FASE 3: Il revisore valuta se accettare o rifiutare un progetto ed eventualmente effettua l’upload
della valutazione.




                                                           8
TESISTA                AMMINISTRATORE                             REVISORE                 DATABASE

                                                                                                                     FASE 1



CARICAMENTO 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
2.3 Analisi dettagliata del caso d’uso del tesista

Il principale caso d’uso è quello che porta all’inserimento di un nuovo progetto da parte del
tesista.

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
2.4 Analisi del caso d’uso Upload Valutazione

Uno 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 di
riferimento ed effettuare l’upload della corrispettiva valutazione.




            Revisore                                                              Sistema



                                      Login-Nome Utente e password



                                Visualizza pagina inserimento valutazione


                                           Upload Valutazione



                                      Conferma avvenuta operazione




Come parte di questa tesi si è realizzato il caso d’uso del tesista e quello relativo all’upload della
valutazione da parte del revisore.




                                                   11
CAPITOLO 3

Progettazione
3.1 Progettazione del Database

In 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 dell'evento

           Nome                                             Nome dell'evento

        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
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)



                                              REVISORE
Id Revisore                           Identificatore univoco numerico del revisore

   Nome                                             Nome revisore

 Cognome                                           Cognome revisore

 Telefono                                   Recapito telefonico del revisore

   Email                                      Indirizzo email del revisore

Credenziali             Credenziali d'accesso del revisore composte da nome utente e password




                                               TESISTA
Id Tesista                            Identificatore univoco numerico del tesista

  Nome                                               Nome tesista

Cognome                                            Cognome tesista

Credenziali             Credenziali d'accesso del revisore composte da nome utente e password




                                           VALUTAZIONE
                     è il collegamento tra l'entità progetto con l'entità revisore
                             MOLTI A MOLTI: un progetto ha tipicamente più valutazioni fornite da diversi
      CARDINALITÀ
                                              revisori; i revisori valutano più progetti

           STATO                             Stato dell'associazione fra progetto e revisore

      VALUTAZIONE                                Titolo del documento con estensione



                                              13
14
I dati di carico evidenziano una quantità stimata di 300 progetti all’anno, per ognuno dei quali ci si
aspetta all’incirca 3 valutazioni, per un totale di 900 valutazioni. Considerando una media
sovrastimata di 3 documenti per progetto ci si aspetta 900 documenti annui. Ad ogni progetto si
associano 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 del
progetto si attestano attorno a qualche decina di elementi.

Il totale dei volumi è quindi molto modesto per un DBMS come sql server 2008, progettato per
gestire centinai di migliaia di record; non è quindi necessaria alcuna modifica dello schema a fini
prestazionali.

3.2 Progettazione della Web Application

3.2.1 Progettazione inserimento progetti

Con riferimento all’analisi del caso d’uso del tesista (capitolo 2.3), è stata progettata una struttura
a cinque livelli:


                        LOGIN



                    INSERIMENTO
                        DATI
                                                                   UPLOAD MAIN
                                                                    DOCUMENT
                    INSERIMENTO
                     KEYWORDS
                                                                     UPLOAD
                                                                  SUPPLEMENTARY
                      UPLOAD                                        DOCUMENT
                     DOCUMENTI



                      RIEPILOGO




Il livello “upload documenti” è suddiviso in due parti in modo da facilitare la distinzione fra i due
tipi di documento previsti in fase di analisi.
                                                  15
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 richiesti
dal software sono essenzialmente gli stessi richiesti dall’applicazione web in progetto.

      Inserimento dati




Tutti 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 e
Copyright.

      Inserimento keywords




                                                 16
La seconda videata sarà simile a quella del software in esame.

       Upload documenti




L’upload del main document, documento obbligatorio ed unico, viene diviso da quelli di possibili
altri documenti al fine di ridurre il rischio di errori in upload da parte dell’utente.

3.2.2 Progettazione upload valutazioni

Anche il revisore dovrà accedere attraverso una pagina di login prima di poter gestire le
valutazioni.

                                                    17
LOGIN



                                              UPLOAD
                                            VALUTAZIONE


Il revisore dovrà solamente definire di quale progetto ha effettuato la revisione e selezionare il file
di cui fare l’upload.

3.2.3 Struttura finale




                                                LOGIN




                         INSERIMENTO                               UPLOAD
                             DATI                                VALUTAZIONE


                         INSERIMENTO
                          KEYWORDS


                         UPLOAD MAIN
                          DOCUMENT


                           UPLOAD
                        SUPPLEMENTARY
                          DOCUMENT


                          RIEPILOGO




                                                  18
CAPITOLO 4

Realizzazione
4.1 Realizzazione Database

Il database che è stato realizzato è composto da diciassette tabelle, quattro viste e cinque stored
procedure.

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
   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 di
semplificare la gestione ed il mantenimento dei dati.

Il diagramma descrive la struttura della base dati, le chiavi primarie e le chiavi esterne.




                                                  20
21
4.2 Realizzazione Web Application

4.2.1 Data Binding

Lo scambio di dati fra l’applicazione e il database avviene con l’utilizzo di una connessione definita
dalla 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 modificare
questa stringa con i parametri adeguati.




4.2.2 Login




                                                 22
Si è realizzata un’unica pagina di login divisa in due parti, la parte superiore dedica ai tesisti e
quella 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 per
l’inserimento dei propri dati, una label per stampare a video l’eventuale stringa d’errore ed un
bottone 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 where
NomeUtente=@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 è alcuna
corrispondenza per le credenziali inserite, altrimenti viene letto il valore contenuto che
corrisponde proprio all’id dell’utente. In quest’ultimo caso si effettua la redirect alla pagina
successiva 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
4.2.3 Nuovo Progetto




Il tesista può ora compilare questa web page composta da tre textbox, un bottone e quattro
dropdowlist. 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 una
select nella tabella di riferimento ed il risultato viene assegnato ad un data reader; il data reader
diventa la sorgente dati della dropdownlist.




                                                 24
Si noti come      DropDownList1NP.DataTextField       indichi l’elemento che verrà visualizzato
nell’interfaccia, mentre   DropDownList1NP.DataValueField   esprime il valore associato alla stringa
mostrata.

        protected void DDL1()
        {
            SqlConnection connection1 = new SqlConnection();
            connection1.ConnectionString = "Data Source=EMXOR;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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 come
parametri 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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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
In seguito all’operazione d’insert, viene creata una nuova riga di cui non si conosce il valore della
chiave primaria.

Per individuare questo valore è stata sviluppata la funzione IDP:

protected void IDP()
        {
            SqlConnection connection6 = new SqlConnection();
            connection6.ConnectionString = "Data Source=EMXOR;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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=@ERC
AND 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 per
identificare la riga corrispondente a quella appena inserita.

È importante notare come la risposta non sia per forza un unico elemento, potrebbe contenere
anche più di un codice identificativo. Ciò può accadere a seguito di un tentativo fallito in
precedenza dell’utente di inserire il medesimo progetto, se infatti un guasto non dovesse
permettere all’utente di concludere tutte le operazioni necessarie per definire un progetto, come
ad esempio l’inserimento dei documenti, dovrà ricompilare il form provocando un doppione nella
base dati. Per ovviare a questo problema si ordinano gli elementi della select in maniera
decrescente 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 al
progetto.



                                                   26
4.2.4 Keywords




L’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
connection11.ConnectionString = "Data Source=EMXOR;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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 dati
con un’insert per ogni dropdownlist. A fini prestazionali questa decisione non è significativamente
dannosa, infatti gli accessi avvengono in ogni caso in numero modesto, solo cinque, e su una
quantità di campi estremamente limitata, appena due. Vi è inoltre un’istruzione if per assicurarsi
che 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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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
Response.Redirect("UploadDoc.aspx?IDT=" + Label1.Text + "&IDP=" + Label2.Text);
        }


Si può ora accedere alla sezione di upload documenti.

4.2.5 Upload main document

Le 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 ed
un 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
<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 seguente
codice 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
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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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
}


La prima parte si occupa di definire il contenuto delle due label e di inizializzare gli elementi che
serviranno per eseguire le operazioni richieste.

La parte centrale, private   void Submit1_ServerClick(object sender, System.EventArgs e),     dopo il
controllo sull’esistenza o meno di un file selezionato, si occupa dell’effettivo upload del file nel
web 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) ed
infine dal nome originale del file. Tale accorgimento serve per evitare la possibile sovrascrittura di
documenti 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 document

I supplementary document sono documenti non obbligatori che completano il documento
principale 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, si
definisce il legame di autore fra tesista e progetto e si assegna lo stato progetto.




                                                   32
La struttura dell’interfaccia è molto simile a quella dedicata al documento principale, ma si
differenzia 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 file
superiore ad uno.




Infatti dopo l’upload del primo file si notifica il successo dell’operazione e si offre la possibilità di
ripetere l’operazione.




                                                   33
Anche in quest’occasione i file cambiano nome con l’aggiunta alla denominazione originale del
numero identificativo di progetto e del suffisso SD (Supplementary Document). Questo tipo di file
saranno 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
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 non
assegnato" in TblStato; Redirect
            SqlConnection connection1 = new SqlConnection();
            connection1.ConnectionString = "Data Source=EMXOR;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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
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 passare
all’ultima schermata dedicata al tesista.

4.2.7 Riepilogo Dati

Questa pagina web ha lo scopo di riepilogare all’utente tutti i dati che ha inserito, in modo da
verificarli   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 alla
pagina di login, mentre “ELIMINA”, oltre a cancellare tutto ciò che riguarda il progetto, ridireziona
il tesista alla pagina “Nuovo Progetto”.


                                                      36
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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=EntityFramework" + "providerName=System.Data.SqlClient";

            SqlCommand DatiPro = new SqlCommand("select * from ViewProgettoDati where
IdProgetto=@IDP", connection1);
            DatiPro.Parameters.AddWithValue("IDP", Label2.Text);
            SqlCommand Parole = new SqlCommand("select Parola from ViewParola where
Progetto=@IDP", connection1);
            Parole.Parameters.AddWithValue("IDP", Label2.Text);
            SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento where
Progetto=@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 al
progetto 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 in
SUPPLEMENTARYDOC.

                                                37
In ogni caso il primo documento estratto dalla select sarà un maindoc, i successivi saranno di
eventuali 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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=EntityFramework" + "providerName=System.Data.SqlClient";

            //elimina documento sul server
            SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento where
Progetto=@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 where
IdProgetto=@IDP", connection);
            DeletePr.Parameters.AddWithValue("IDP", Label2.Text);
            connection.Open();
            DeletePr.ExecuteNonQuery();
            connection.Close();

              Response.Redirect("NewProgetto.aspx?IDT="+Label1.Text);
         }




                                                38
4.2.8 Upload valutazioni




Il 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;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=EntityFramework" + "providerName=System.Data.SqlClient";

            SqlCommand CheckRVS = new SqlCommand("select Revisore from TblCredenzialiRVS
where 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
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
Vi sarà una notifica dell’operazione avvenuta e sarà possibile effettuare un altro upload o tornare
alla home page.

A livello implementativo il funzionamento è il medesimo di quello che è stato attuato per i
documenti dei progetti, ad esclusione della parte riguardante la base dati. Infatti nella
TblValutazione 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 del
nome 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
}
            else
            {
                   Label2.Text = "Seleziona un file";
            }
        }
        protected void UPDB ()
        {
            SqlConnection connection1 = new SqlConnection();
            connection1.ConnectionString = "Data Source=EMXOR;Initial
Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application
Name=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
CAPITOLO 5

Conclusioni
Gli obiettivi prefissati sono stati raggiunti con l’implementazione dei seguenti elementi:

    Database del sistema
    Tesista: Inserimento progetti
    Revisore: Upload valutazioni

Inoltre è stata sviluppata un’analisi del sistema e delle funzionalità della base dati tali da facilitare
il 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 HTML




I 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 scritto

250 righe di html e 800 righe di codice C#.
                                                   43
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

Weitere ähnliche Inhalte

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

Tesi Case Roberto
Tesi Case RobertoTesi Case Roberto
Tesi Case Robertoguestffdfbc
 
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...BravinDavide
 
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...guest86388a
 
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...guest86388a
 
Laboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàLaboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàRoberto Polillo
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Grogdunn
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGiacomoZorzin
 
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALI
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALIREALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALI
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALIStefano Cenizzi
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...diegohusu
 
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...Alessandro Umek
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...LeD87
 
Openatrium come backend caprowsky
Openatrium come backend   caprowskyOpenatrium come backend   caprowsky
Openatrium come backend caprowskyAlessandro Capra
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...artemedea
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Marco Furlanetto
 
Convegno 23/11 | COLLI Sabrina
Convegno 23/11 | COLLI SabrinaConvegno 23/11 | COLLI Sabrina
Convegno 23/11 | COLLI SabrinaServizi a rete
 
Wiki for Governance Risk and Compliance
Wiki for Governance Risk and ComplianceWiki for Governance Risk and Compliance
Wiki for Governance Risk and ComplianceFrancesco Magagnino
 
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...Giulio Ambrogi
 
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...snoopalexia
 

Ähnlich wie Realizzazione di una base di dati per la gestione delle valutazioni di progetti di ricerca (20)

Tesi Case Roberto
Tesi Case RobertoTesi Case Roberto
Tesi Case Roberto
 
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...
Tesi di laurea - Progettazione e realizzazione di un portale per la gestione ...
 
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
 
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
Cecutti Federico - Progetto e sviluppo di un'applicazione domotica per telefo...
 
Laboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualitàLaboratorio internet 6: Piano di qualità
Laboratorio internet 6: Piano di qualità
 
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
Analisi e sviluppo di uno strumento per l'automazione della verifica di confo...
 
Generazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptxGenerazione automatica diagrammi di rete con template pptx
Generazione automatica diagrammi di rete con template pptx
 
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALI
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALIREALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALI
REALIZZAZIONE DI UNA WEB PART PER L'ACCESSO A MOTORI DI BASI DI DATI RELAZIONALI
 
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
Progetto e realizzazione di un'applicazione WebGIS per la visualizzazione di ...
 
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...
Integrazione e sviluppo di una piattaforma per la gestione delle conformità a...
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
 
Openatrium come backend caprowsky
Openatrium come backend   caprowskyOpenatrium come backend   caprowsky
Openatrium come backend caprowsky
 
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
Studio e realizzazione di un sw per la gestione dei profili e delle versioni ...
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...Realizzazione di un' interfaccia web per la gestione dei file di log generati...
Realizzazione di un' interfaccia web per la gestione dei file di log generati...
 
Tesi Todone
Tesi TodoneTesi Todone
Tesi Todone
 
Convegno 23/11 | COLLI Sabrina
Convegno 23/11 | COLLI SabrinaConvegno 23/11 | COLLI Sabrina
Convegno 23/11 | COLLI Sabrina
 
Wiki for Governance Risk and Compliance
Wiki for Governance Risk and ComplianceWiki for Governance Risk and Compliance
Wiki for Governance Risk and Compliance
 
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...
Porting evolutivo di una applicazione per la gestione di riferimenti bibliogr...
 
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...
Studioerealizzazionedisoluzioniperlavorocollaborativobasatesulmotorediworkflo...
 

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

  • 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA CORSO DI LAUREA TRIENNALE IN INGEGNERIA DELL'INFORMAZIONE CURRICULUM INFORMATICA REALIZZAZIONE DI UNA BASE DI DATI PER LA GESTIONE DELLE VALUTAZIONI DI PROGETTI DI RICERCA Laureando: Relatore: EFREM VENTURUZZO CHIAR.MO PROF. MAURIZIO FERMEGLIA ANNO ACCADEMICO 2011/2012
  • 2. INDICE DEI CONTENUTI CAPITOLO 1 INTRODUZIONE 4 CAPITOLO 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 11 CAPITOLO 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 18 CAPITOLO 4 REALIZZAZIONE 19 4.1 Realizzazione Database 19 4.2 Realizzazione Web Application 22 4.2.1 Data Binding 22 2
  • 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 39 CAPITOLO 5 CONCLUSIONI 43 BIBLIOGRAFIA 44 3
  • 4. CAPITOLO 1 Introduzione Lo scopo di questa tesi è la creazione di una base di dati e di un’applicazione web per la gestione dei 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 di effettuare l’upload dei relativi documenti e ai revisori la possibilità di gestire l’upload delle valutazioni 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 progetto come 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 dei tesisti, dei revisori e da quello dell’editore. I vincoli progettuali sono rappresentati dall’utilizzo delle tecnologie .NET, del linguaggio di programmazione C# e del linguaggio di markup HTML5. 4
  • 5. Per la realizzazione del database è stato richiesto di usare SQL Server 2008 per garantire la massima compatibilità, in quanto questo è già usato all’interno dell’ambiente come data base management 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. CAPITOLO 2 Analisi 2.1 Intervista al committente La prima fondamentale informazione che deriva dall’intervista è la mancanza di un sistema preesistente 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 sistema Gli attori fondamentali del sistema sono tre:  Tesista;  Editore;  Revisore. 6
  • 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 valutazione I casi d’uso dell’editore sono vari, in particolar modo si mettono in risalto i principali come: 7
  • 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 Valutazioni Si 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 attraverso applicazioni dedicate. In un secondo momento si potrà passare alla realizzazione di strumenti atti a 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, non compie altre azioni. FASE 2: l’editore visualizza i progetti in scadenza, richiede una lista dei revisori, anche in base a certi specifici parametri, ed assegna ai revisori i progetti. FASE 3: Il revisore valuta se accettare o rifiutare un progetto ed eventualmente effettua l’upload della valutazione. 8
  • 9. TESISTA AMMINISTRATORE REVISORE DATABASE FASE 1 CARICAMENTO 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. 2.3 Analisi dettagliata del caso d’uso del tesista Il principale caso d’uso è quello che porta all’inserimento di un nuovo progetto da parte del tesista. 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. 2.4 Analisi del caso d’uso Upload Valutazione Uno 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 di riferimento ed effettuare l’upload della corrispettiva valutazione. Revisore Sistema Login-Nome Utente e password Visualizza pagina inserimento valutazione Upload Valutazione Conferma avvenuta operazione Come parte di questa tesi si è realizzato il caso d’uso del tesista e quello relativo all’upload della valutazione da parte del revisore. 11
  • 12. CAPITOLO 3 Progettazione 3.1 Progettazione del Database In 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 dell'evento Nome Nome dell'evento 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. 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) REVISORE Id Revisore Identificatore univoco numerico del revisore Nome Nome revisore Cognome Cognome revisore Telefono Recapito telefonico del revisore Email Indirizzo email del revisore Credenziali Credenziali d'accesso del revisore composte da nome utente e password TESISTA Id Tesista Identificatore univoco numerico del tesista Nome Nome tesista Cognome Cognome tesista Credenziali Credenziali d'accesso del revisore composte da nome utente e password VALUTAZIONE è il collegamento tra l'entità progetto con l'entità revisore MOLTI A MOLTI: un progetto ha tipicamente più valutazioni fornite da diversi CARDINALITÀ revisori; i revisori valutano più progetti STATO Stato dell'associazione fra progetto e revisore VALUTAZIONE Titolo del documento con estensione 13
  • 14. 14
  • 15. I dati di carico evidenziano una quantità stimata di 300 progetti all’anno, per ognuno dei quali ci si aspetta all’incirca 3 valutazioni, per un totale di 900 valutazioni. Considerando una media sovrastimata di 3 documenti per progetto ci si aspetta 900 documenti annui. Ad ogni progetto si associano 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 del progetto si attestano attorno a qualche decina di elementi. Il totale dei volumi è quindi molto modesto per un DBMS come sql server 2008, progettato per gestire centinai di migliaia di record; non è quindi necessaria alcuna modifica dello schema a fini prestazionali. 3.2 Progettazione della Web Application 3.2.1 Progettazione inserimento progetti Con riferimento all’analisi del caso d’uso del tesista (capitolo 2.3), è stata progettata una struttura a cinque livelli: LOGIN INSERIMENTO DATI UPLOAD MAIN DOCUMENT INSERIMENTO KEYWORDS UPLOAD SUPPLEMENTARY UPLOAD DOCUMENT DOCUMENTI RIEPILOGO Il livello “upload documenti” è suddiviso in due parti in modo da facilitare la distinzione fra i due tipi di documento previsti in fase di analisi. 15
  • 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 richiesti dal software sono essenzialmente gli stessi richiesti dall’applicazione web in progetto.  Inserimento dati Tutti 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 e Copyright.  Inserimento keywords 16
  • 17. La seconda videata sarà simile a quella del software in esame.  Upload documenti L’upload del main document, documento obbligatorio ed unico, viene diviso da quelli di possibili altri documenti al fine di ridurre il rischio di errori in upload da parte dell’utente. 3.2.2 Progettazione upload valutazioni Anche il revisore dovrà accedere attraverso una pagina di login prima di poter gestire le valutazioni. 17
  • 18. LOGIN UPLOAD VALUTAZIONE Il revisore dovrà solamente definire di quale progetto ha effettuato la revisione e selezionare il file di 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. CAPITOLO 4 Realizzazione 4.1 Realizzazione Database Il database che è stato realizzato è composto da diciassette tabelle, quattro viste e cinque stored procedure. 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. 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 di semplificare 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
  • 22. 4.2 Realizzazione Web Application 4.2.1 Data Binding Lo scambio di dati fra l’applicazione e il database avviene con l’utilizzo di una connessione definita dalla 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 modificare questa stringa con i parametri adeguati. 4.2.2 Login 22
  • 23. Si è realizzata un’unica pagina di login divisa in due parti, la parte superiore dedica ai tesisti e quella 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 per l’inserimento dei propri dati, una label per stampare a video l’eventuale stringa d’errore ed un bottone 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 where NomeUtente=@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 è alcuna corrispondenza per le credenziali inserite, altrimenti viene letto il valore contenuto che corrisponde proprio all’id dell’utente. In quest’ultimo caso si effettua la redirect alla pagina successiva 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. 4.2.3 Nuovo Progetto Il tesista può ora compilare questa web page composta da tre textbox, un bottone e quattro dropdowlist. 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 una select nella tabella di riferimento ed il risultato viene assegnato ad un data reader; il data reader diventa la sorgente dati della dropdownlist. 24
  • 25. Si noti come DropDownList1NP.DataTextField indichi l’elemento che verrà visualizzato nell’interfaccia, mentre DropDownList1NP.DataValueField esprime il valore associato alla stringa mostrata. protected void DDL1() { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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 come parametri 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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. In seguito all’operazione d’insert, viene creata una nuova riga di cui non si conosce il valore della chiave primaria. Per individuare questo valore è stata sviluppata la funzione IDP: protected void IDP() { SqlConnection connection6 = new SqlConnection(); connection6.ConnectionString = "Data Source=EMXOR;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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=@ERC AND 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 per identificare la riga corrispondente a quella appena inserita. È importante notare come la risposta non sia per forza un unico elemento, potrebbe contenere anche più di un codice identificativo. Ciò può accadere a seguito di un tentativo fallito in precedenza dell’utente di inserire il medesimo progetto, se infatti un guasto non dovesse permettere all’utente di concludere tutte le operazioni necessarie per definire un progetto, come ad esempio l’inserimento dei documenti, dovrà ricompilare il form provocando un doppione nella base dati. Per ovviare a questo problema si ordinano gli elementi della select in maniera decrescente 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 al progetto. 26
  • 27. 4.2.4 Keywords L’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. connection11.ConnectionString = "Data Source=EMXOR;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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 dati con un’insert per ogni dropdownlist. A fini prestazionali questa decisione non è significativamente dannosa, infatti gli accessi avvengono in ogni caso in numero modesto, solo cinque, e su una quantità di campi estremamente limitata, appena due. Vi è inoltre un’istruzione if per assicurarsi che 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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. Response.Redirect("UploadDoc.aspx?IDT=" + Label1.Text + "&IDP=" + Label2.Text); } Si può ora accedere alla sezione di upload documenti. 4.2.5 Upload main document Le 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 ed un 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. <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 seguente codice 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. 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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. } La prima parte si occupa di definire il contenuto delle due label e di inizializzare gli elementi che serviranno per eseguire le operazioni richieste. La parte centrale, private void Submit1_ServerClick(object sender, System.EventArgs e), dopo il controllo sull’esistenza o meno di un file selezionato, si occupa dell’effettivo upload del file nel web 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) ed infine dal nome originale del file. Tale accorgimento serve per evitare la possibile sovrascrittura di documenti 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 document I supplementary document sono documenti non obbligatori che completano il documento principale 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, si definisce il legame di autore fra tesista e progetto e si assegna lo stato progetto. 32
  • 33. La struttura dell’interfaccia è molto simile a quella dedicata al documento principale, ma si differenzia 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 file superiore ad uno. Infatti dopo l’upload del primo file si notifica il successo dell’operazione e si offre la possibilità di ripetere l’operazione. 33
  • 34. Anche in quest’occasione i file cambiano nome con l’aggiunta alla denominazione originale del numero identificativo di progetto e del suffisso SD (Supplementary Document). Questo tipo di file saranno 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. 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 non assegnato" in TblStato; Redirect SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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. 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 passare all’ultima schermata dedicata al tesista. 4.2.7 Riepilogo Dati Questa pagina web ha lo scopo di riepilogare all’utente tutti i dati che ha inserito, in modo da verificarli 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 alla pagina di login, mentre “ELIMINA”, oltre a cancellare tutto ciò che riguarda il progetto, ridireziona il tesista alla pagina “Nuovo Progetto”. 36
  • 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand DatiPro = new SqlCommand("select * from ViewProgettoDati where IdProgetto=@IDP", connection1); DatiPro.Parameters.AddWithValue("IDP", Label2.Text); SqlCommand Parole = new SqlCommand("select Parola from ViewParola where Progetto=@IDP", connection1); Parole.Parameters.AddWithValue("IDP", Label2.Text); SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento where Progetto=@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 al progetto 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 in SUPPLEMENTARYDOC. 37
  • 38. In ogni caso il primo documento estratto dalla select sarà un maindoc, i successivi saranno di eventuali 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" + "providerName=System.Data.SqlClient"; //elimina documento sul server SqlCommand DocIns = new SqlCommand("select DOC from TblDocumento where Progetto=@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 where IdProgetto=@IDP", connection); DeletePr.Parameters.AddWithValue("IDP", Label2.Text); connection.Open(); DeletePr.ExecuteNonQuery(); connection.Close(); Response.Redirect("NewProgetto.aspx?IDT="+Label1.Text); } 38
  • 39. 4.2.8 Upload valutazioni Il 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;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" + "providerName=System.Data.SqlClient"; SqlCommand CheckRVS = new SqlCommand("select Revisore from TblCredenzialiRVS where 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. 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. Vi sarà una notifica dell’operazione avvenuta e sarà possibile effettuare un altro upload o tornare alla home page. A livello implementativo il funzionamento è il medesimo di quello che è stato attuato per i documenti dei progetti, ad esclusione della parte riguardante la base dati. Infatti nella TblValutazione 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 del nome 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. } else { Label2.Text = "Seleziona un file"; } } protected void UPDB () { SqlConnection connection1 = new SqlConnection(); connection1.ConnectionString = "Data Source=EMXOR;Initial Catalog=GestioneProgetti;Integrated Security=True;MultipleActiveResultSets=True;Application Name=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. CAPITOLO 5 Conclusioni Gli obiettivi prefissati sono stati raggiunti con l’implementazione dei seguenti elementi:  Database del sistema  Tesista: Inserimento progetti  Revisore: Upload valutazioni Inoltre è stata sviluppata un’analisi del sistema e delle funzionalità della base dati tali da facilitare il 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 HTML I 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 scritto 250 righe di html e 800 righe di codice C#. 43
  • 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