5Il software in questione è stato sviluppato interamente nel linguaggio di
programmazione Java con tecnologia J2EE (Java 2 Enterprise Edition); in
particolare il framework adottato è Struts di Apache Software
Foundation, con la sezione di pagine dinamiche implementata tramite
JSP (Java Server Pages) e la parte di persistenza dati affidata al DBMS
Oracle.
Per implementare il templating su pagine JSP è stata sfruttata
ů͛ĞƐƚĞŶƐŝŽŶĞ Tiles di Struts.
61 Descrizione ĚĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞ
1.1 Breve panoramica
I benefici che un programma di gestione delle note spese intende
ĂƉƉŽƌƚĂƌĞ ĂĚ ƵŶ͛azienda si concretizzano, oltre che nella possibilità di
generare, conservare e consultare i dati relativi alle azioni dei propri
dipendenti, ĂŶĐŚĞ Ğ ƐŽƉƌĂƚƚƵƚƚŽ ŶĞůů͛ĂƵŵĞŶƚo del livello di
automatizzazione dei vari processi che appartengono al ciclo di vita di
una nota spese.
La scelta architetturale attualmente più naturale per un software di
questo genere, seppure sia ugualmente molto valido il più classico
approccio client-server, pare corrispondere a quella della applicazione
web dinamica; i motivi sono da riscontrarsi nei vantaggi concreti nonché
nelle possibilità offerte, alcune delle quali sono qui elencate:
x ů͛ĞƐĞĐƵnjŝŽŶĞĚĞůůĞ operazioni fondamentali del ciclo di vita di una
nota spese tradizionale con una sicura riduzione del lasso di tempo
che intercorƌĞĚĂůů͛ŝŶŽůƚƌŽĚĞůůĂƌŝĐŚŝĞƐƚĂ al rimborso delle spese al
dipendente;
x il generale aumento ĚĞůů͛ĂƵƚŽŵĂƚŝnjnjĂnjŝŽŶĞĚŝƋƵĞůůĞƉƌĂƚŝĐŚĞůĞŐĂƚĞ
indirettamente al sistema delle note spese, ad esempio la
contabilizzazione (una volta confermata la nota spese i dati
possono essere inviati direttamente al software usato dalla
contabilità), oƉƉƵƌĞ ů͛ŝŶǀŝŽ Ěŝ ƉƌĞŶotazioni alle agenzie di viaggi
(ĚŽƉŽ ů͛ĂƉƉƌŽǀĂnjŝŽŶĞ ĚĞůůĂ ŶŽƚĂ ƐƉĞƐĞ͕ ŝů ƐŝƐƚĞŵĂ ƉƵž ŝŶǀŝĂƌĞ ŝŶ
automatico una mail di richiesta di organizzazione di un viaggio ad
ƵŶ͛ĂŐĞŶnjŝĂƌĞŐŝƐƚƌĂƚĂŶĞůƐŝƐƚĞŵĂ);
x la rilevante caratteristica delle applicazioni web che consiste
ŶĞůů͛ĂĐĐĞƐƐŽremoto tramite browser in ogni momento, il che offre
la possibilità in variegate condizioni tecnologiche di risparmiare ai
7dipendenti che lavorano spesso in trasferta il passaggio presso la
sede.
1.2 Dettaglio delle funzionalità
¾ Centri di costo
hŶ ĐĞŶƚƌŽ Ěŝ ĐŽƐƚŽ ğ ƵŶ͛ĞŶƚŝƚă ĂůůĂ ƋƵĂůĞ ĚĞǀĞ ĨĂƌĞ ƌŝĨĞƌŝŵĞŶƚŽ ƵŶĂ
ŶŽƚĂƐƉĞƐĞ͕ ŝŶŐĞŶĞƌĞğƵŶƐĞƚƚŽƌĞĚĞůů͛ĂnjŝĞŶĚĂ͘ /ŶRTS-EXPENSE si è
deciso di gestire le associazioni tra i dipendenti ed il relativo centro di
ĐŽƐƚŽƚƌĂŵŝƚĞƵŶĂƚĂďĞůůĂƐƵƉĞƌǀŝƐŝŽŶĂƚĂĚĂůů͛ƵƚĞŶƚĞĚŝĐŽŶƚĂďŝůŝƚă͘EĞů
caso in cui un dipendente sia anche dirigente è possibile assegnarvi il
ruolo di autorizzatore; inoltre può essere attivato, a discrezione
ĚĞůů͛ĂƵƚŽƌŝnjnjĂƚŽƌĞ͕ ŝů ƐĞƌǀŝnjŝŽ Ěŝ ŶŽƚŝĨŝĐĂ Ěŝ ƌŝĐŚŝĞƐƚĂ ĂƵƚŽƌŝzzazione
ƚƌĂŵŝƚĞ ŵĂŝů͘ /Ŷ ƋƵĞƐƚ͛ƵůƚŝŵŽ ĐĂƐŽ͕ ŽŐŶŝƋƵĂůǀŽůƚĂ un dipendente
effettua una richiesta di nota spese verso il centro di costo, viene
invŝĂƚĂ ŝŶ ĂƵƚŽŵĂƚŝĐŽ ƵŶĂŵĂŝů Ăůů͛ĂƵƚŽƌŝnjnjĂƚŽƌĞ ĂƐƐĞŐŶĂƚŽ Ăů ĐĞŶƚƌŽ
stesso. EĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞŝŶƋƵĞƐƚŝŽŶĞè stato previsto un costo limite
massimo per un utente autorizzatore.
¾ Agenzia di viaggio
dƌĂŵŝƚĞ ů͛ĂƉƉůŝĐĂnjŝŽŶĞ ğ ƉŽƐƐŝďŝůĞ ŐĞƐƚŝƌĞ ůĞ ŵĂŝů Ěŝ ƌŝĨĞƌŝŵento
ĚĞůů͛ĂŐĞŶnjŝĂ ǀŝĂŐŐŝ͕ ŝŶ ŵŽĚŽ ĐŚĞ ǀĞŶŐĂŶŽ ƐƉĞĚŝƚŝ ŝŶ ĂƵƚŽŵĂƚŝĐŽ ĚĞŝ
messaggi di posta a questi indirizzi quando viene approvata una nota
spese viaggio.
¾ Integrazione SAP
EĞůůĂ ƐĞnjŝŽŶĞ ͞ZĞŐŝƐƚƌĂnjŝŽŶĞ ^W͟ ĚĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞ͕ ĂĐĐĞƐƐŝďŝůĞ
solamente agli utĞŶƚŝĚĞůŐƌƵƉƉŽ͞ŽŶƚĂďŝůŝƚă͕͟ğƉŽƐƐŝďŝůĞƚƌĂƐŵĞƚƚĞƌĞ
ad un sistema SAP R/3 le note spese approvate per la
ĐŽŶƚĂďŝůŝnjnjĂnjŝŽŶĞ͘ EĞůů͛ĂƌĞĂ ͞ZĞŐŝƐƚƌĂnjŝŽŶĞ ƉĂƌĞŐŐŝ ^W͟ Ɛŝ ƉƵž
effettuare la trasmissione delle informazioni sui pagamenti di cassa
delle note spese. hŶ͛ĂůƚƌĂ funzione integrata con il software di
contabilità SAP ƉĞƌŵĞƚƚĞĚŝŝŵƉŽƌƚĂƌĞů͛ĂŶĂŐƌĂĨŝĐĂĚĞŝĚŝƉĞŶĚĞŶƚŝĐŚĞ
inserirà i nuovi e contemporaneamente aggiornerà i dati dei
dipendenti già presenti nel sistema, ma i cui dati risultano disallineati.
8¾ Autorizzazioni Viaggio
dƌĂŵŝƚĞ ŝů ŵĞŶƵ ͞Ƶƚ͘ sŝĂŐŐŝŽ͟ ğ ƉŽƐƐŝďŝůĞ ĐƌĞĂƌĞ ůĞ ƌŝĐŚŝĞƐƚĞ Ěŝ
autorizzazione per il rimborso delle spese per i viaggi. Una volta
ĐŽŵƉŝůĂƚŽ ŝů ͞ĨŽƌŵ͟ ƉĞƌ ůĂ ƌŝĐŚŝĞƐƚĂ͕ ŝ ĚĂƚŝ ŝŶƐĞƌŝƚŝ ƉŽƐƐŽŶŽ ĞƐƐĞƌĞ
salvati per poi poter effettuare successivamente delle modifiche,
oppure può essere inoltrata la richiesta che verrà messa in uno stato
di attesa di autorizzazione.
ƋƵĞƐƚŽ ƉƵŶƚŽ ů͛ƵƚĞŶƚĞ ĂƵƚŽƌŝnjnjĂƚŽƌĞ ĂƐƐŽĐŝĂƚŽ Ăů ĐĞŶƚƌŽ Ěŝ ĐŽƐƚŽ Ă
ĐƵŝĨĂƌŝĨĞƌŝŵĞŶƚŽů͛ĂƵƚŽƌŝnjnjĂnjŝŽŶĞǀŝĂŐŐŝŽ͕ƌŝĐĞǀĞƌà una mail di notifica
(nel caso abbia abilitato la ricezione delle e-mail) e potrà decidere se
ĂƵƚŽƌŝnjnjĂƌĞŽŵĞŶŽůĞƐƉĞƐĞƉĞƌƋƵĞůů͛ĂƵƚŽƌŝnjnjĂnjŝŽŶĞǀŝĂŐŐŝŽƚƌĂŵŝƚĞŝů
ŵĞŶƵ͞ƵƚŽƌŝnjnjĂnjŝŽŶŝ͘͟
EĞůĐĂƐŽ ƚĂůĞ ƌŝĐŚŝĞƐƚĂǀĞŶŐĂĂƵƚŽƌŝnjnjĂƚĂ͕ ů͛ƵƚĞŶƚĞĐŚĞ ůĂŚĂ ŝŶŽltrata
ƉŽƚƌăĂƐƐŽĐŝĂƌĞĂůů͛ĂƵƚŽƌŝnjnjĂnjŝŽŶĞǀŝĂŐŐŝŽƵŶĂŶŽƚĂƐƉĞƐĞŶĞůůĂƋƵĂůĞƐŝ
ƉŽƐƐŽŶŽŝŶƐĞƌŝƌĞůĞ͞ǀŽĐŝĚŝƐƉĞƐĂ͟ĐŚĞŝĚĞŶƚŝĨŝĐĂŶŽĂƉƉƵŶƚŽůĞƐƉĞƐĞ
sostenute durante il periodo di trasferta con il rispettivo importo.
¾ Note spese: richieste e autorizzazioni:
In Peopleweb sono presenti 3 tipi di note spese:
x Note spese (associate alle autorizzazioni viaggio)
x Note spese auto
x Note spese varie
Tutti i tipi di note spese passano per i seguenti stati durante il loro
ciclo di vita:
1. Nuovo documento: in questo stato la nota spese non è ancora
presente sul database ma è in fase di compilazione.
2. Non emesso: la nota spese è stata salvata, quindi vi è una riga
presente sul database che la rappresenta, ma non è ancora stata
ŝŶŽůƚƌĂƚĂƉĞƌů͛ĂƉƉƌŽǀĂnjŝŽŶĞ
93. Emesso: la nota spĞƐĞğƐƚĂƚĂŝŶŽůƚƌĂƚĂƉĞƌů͛ĂƉƉƌŽǀĂnjŝŽŶĞ͕ĞƋƵŝŶĚŝ
ğǀŝƐŝďŝůĞĂůů͛ƵƚĞŶƚĞĂƵƚŽƌŝnjnjĂƚŽƌĞĂƐƐŽĐŝĂƚŽĂůĐĞŶƚƌŽĚŝĐŽƐƚŽĂĐƵŝ
fa riferimento la nota.
4. Approvato: ůĂ ŶŽƚĂ ƐƉĞƐĞ ğ ƐƚĂƚĂ ĂƉƉƌŽǀĂƚĂ ĚĂůů͛ƵƚĞŶƚĞ
autorizzatore e risulta visibile alla contabilizzazione.
5. Contabilizzato: la nota spese ha terminato il suo ciclo di vita, per
cui, non è più possibile effettuare delle modifiche su di essa ma è
presente comunque nel database al fine di essere visionata
Ăůů͛ŝŶƚĞƌŶŽĚĞůůŽstorico delle note spese.
10
2 Design ĚĞůů͛applicazione e tecnologie utilizzate
Il software è stato ideato e sviluppato come web application basata su
J2EE, ed in quanto tale è stato progettato tenendo conto degli standard
riconosciuti nel design di questo genere di applicazioni. Uno dei pattern
di alto livello più diffusi e accreditati, capace di adattarsi alle
problematiche tipiche di queste architetture, è denominato MVC (Model-
View-Controller).
Segue una presentazione del modello di sviluppo e della sua
implementazione attuale tramite ů͛ƵƐŽĚĞů framework Struts e delle Java
Server Pages.
2.1 Il design pattern MVC (Model-View-Controller)
Il design pattern DsƚƌŽǀĂůĞƐƵĞƉƌŝŵĞĂƉƉůŝĐĂnjŝŽŶŝŶĞŝƉƌŝŵŝĂŶŶŝ͚ϴϬ͕Ğ
nel corso degli anni è stato soggetto ad adattamenti dovuti alle mutevoli
esigenze e all͛ĞǀŽůƵnjŝŽŶĞƚĞĐŶŽůŽŐŝĐĂ, ed al fatto che si tratta in sé di una
composizione di patterns. Rimane tuttavia valido il concetto di base
secondo il quale ů͛ĂƉƉůŝĐĂnjŝŽŶĞ ĚĞǀĞ ĞƐƐĞƌĞ ŝŶ ŐƌĂĚŽ Ěŝ ƐĞƉĂƌĂƌĞ
semanticamente i livelli di logica funzionale e di presentazione dei dati
(interfaccia utente). Nel dettaglio, la divisione dei compiti espressa nel
modello è la seguente:
x Model: ŝŶĐĂƉƐƵůĂ ůŽ ƐƚĂƚŽ ĚĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞ͕ ĚĞĨŝŶĞŶĚŽ ŝ ĚĂƚŝ Ğ ůĞ
operazioni eseguibili su di essi, ed espone le funzionalità per
l'accesso e l'aggiornamento rispettivamente alla View ed al
Controller. La logica funzionale aggiunge una semantica ai dati
grezzi (molte applicazioni utilizzano un mezzo di persistenza per
salvare i dati, nel presente caso un database).
Il model può avere inoltre la responsabilità di notificare ai
componenti della view eventuali aggiornamenti verificatisi in
seguito a richieste del controller, al fine di permettere alla view di
ŵŽƐƚƌĂƌĞĂůů͛ƵƚĞŶƚĞĚĂƚŝĂŐŐŝŽƌŶĂƚŝ͘
11
x View: espone il Model ŝŶ ƵŶĂ ĨŽƌŵĂ ĂĚĂƚƚĂ Ăůů͛ŝŶƚĞƌazione con
ů͛ƵƚĞŶƚĞĞŐĞƐƚŝƐĐĞ interamente la logica di presentazione dei dati.
Nella pratica, si occupa della costruzione dell'interfaccia grafica
(GUI) che rappresenta il mezzo mediante il quale gli utenti
interagiranno con il sistema. Ogni GUI può essere costituita da
schermate diverse che presentano più modi di interagire con i dati
dell'applicazione. Per far sì che i dati presentati siano sempre
aggiornati è possibile adottare due strategie note come "push
model" e "pull model". Il push model adotta il pattern Observer,
registrando le View come osservatori del Model. Le View possono
quindi richiedere gli aggiornamenti al Model in tempo reale grazie
alla notifica di quest'ultimo; nel "pull Model", invece, la View
richiede gli aggiornamenti quando "lo ritiene opportuno". Infine, la
View delega al Controller l'esecuzione dei processi richiesti
dall'utente dopo averne catturato gli input e la scelta delle
eventuali schermate da presentare.
x Controller: elabora le richieste ĚĞůů͛ƵƚĞŶte inviate tramite la View,
può interagire con il Model richiedendone dei servizi e sceglie le
view di risposta alle richieste. Rappresenta la logica di controllo
ĚĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞ͘
Segue in figura 2.1 uno schema delle interazioni fra i tre componenti.
12
Figura 2.1: Schema delle interazioni nel modello MVC.
2.2 Implementazione di MVC nelle applicazioni web Java
Il design pattern appena descritto è largamente diffuso nel mondo del
software enterprise grazie alla sua coerenza con J2EE e di conseguenza
con le web applications basate su esso. Verranno esaminati gli strumenti
per mezzo dei ƋƵĂůŝ Őůŝ ƐǀŝůƵƉƉĂƚŽƌŝ ĐŽŶĨŽƌŵĂŶŽ ƵŶ͛ĂƉƉůŝĐĂnjŝŽŶĞ :ĂǀĂ Ă
questo modello di sviluppo, nonché le principali varianti del pattern
correntemente in uso.
2.2.1 JavaBeans
Rappresentano ƵŶ͛implementazione della parte di Model del paradigma
MVC.
I JavaBeans sono classi Java scritte seguendo una particolare
ĐŽŶǀĞŶnjŝŽŶĞ͕ĐŚĞŚĂŶů͛ŽďŝĞƚƚŝǀŽĚŝŝŶĐĂƉƐƵůĂƌĞĂůloro ŝŶƚĞƌŶŽƵŶ͛ŝŶƐŝĞŵĞ
di oggetti ed essere un componente software riutilizzabile.
Model
Mantiene lo stato
ĚĞůů͛ĂƉƉůŝĐĂnjŝŽŶĞĞƉƵžŝŶǀŝĂƌĞ
alla view le notifiche dei
cambiamenti tramite il pattern
observer
View
Gestisce la logica di
presentazione dei dati e richiede
al controller ů͛ĞƐĞĐƵnjŝŽŶĞĚĞŝ
processi richiesti ĚĂůů͛ƵƚĞŶƚĞ
Controller
ůĂďŽƌĂůĞƌŝĐŚŝĞƐƚĞĚĞůů͛ƵƚĞŶƚĞ
richiedendo i servizi del model e
sceglie le view di risposta
Richiesta stato
Notifica stato
Selezione view
Cambio di stato
Input utente