Bellissimo progetto
Finalmente un po' di tempo da dedicare al blog!
Nell'ultimo mese sono stato preso da un progetto molto interessante che la mia azienda ha realizzato per conto del nostro cliente più importante.
La cosa che mi fa essere veramente fiero di questo lavoro è il fatto di aver utilizzato parecchie funzionalità che finora avevo utilizzato sporadicamente e solo per soluzioni piuttosto piccole. Nello specifico, l'applicazione in questione sfrutta:
SQL Server 2005 Standard Edition
SQL Server 2005 Integration Services
XML / XSLT
XQuery
Web Services ASP.NET 2.0 (tradizionali, non WCF ..peccato!)
Web Application ASP.NET 2.0
IBatis
SFTP
Internet Explorer 7
L'esigenza del nostro cliente (un importante spedizioniere) era quella di permettere ad un proprio cliente di alto livello di non produrre in forma cartacea i documenti di trasporto (DDT) ma bensì di farli stampare direttamente dalle filiali di destinazione della merce (stiamo parlando di oltre 2000 documenti al giorno). In questo modo il risparmio di tempo (e carta!) sarebbe stato imponente, con tutti i vantaggi che ne conseguono.
Il cliente ha proposto l'XML come formato di scambio dei documenti (alla quale applicare un foglio XSLT per la formattazione e l'impaginazione) e ha modificato il proprio software perché scrivesse su un server SFTP i files contenenti i documenti man mano che la merce viene smistata per lo spedizioniere.
Lato nostro si è provveduto ha realizzare un database SQL Server 2005 in grado di ospitare i documenti ed un package Integration Services 2005 schedulato tramite Agent che si occupa di prelevare il files ad orari prestabiliti dal server SFTP (abbiamo utilizzato un tool gratuito esterno: il psftp ) e di caricarli all'interno del database.
Per permettere un'indicizzazione "semplice" di questi dati, durante la fase di caricamento (che utilizza OPENROWSET) il documento viene esplorato utilizzando XQuery e ne vengono estratte due informazioni fondamentali: il NumeroDocumento (identificativo univoco del documento) e la DataDocumento. Queste due informazioni vengono inserite in due campi dedicati affiancati dal campo varbinary(max) che contiene tale documento.
I documenti sono così disponibili per l'applicazione.
Ora è necessario fronteggiare un secondo problema, visti i tempi molto stretti da sfruttare per analisi, sviluppo e test (circa 25 giornate in tutto) sarebbe stato difficoltoso realizzare un'applicazione client da installare sui pc di tutte le filiali (alcune di esse sono connesse tramite connessioni remote e quindi non raggiungibili tramite controllo remoto). La soluzione più semplice che ci è venuta in mente è stata quella di sviluppare un'applicazione web raggiungibile dalle filiali che permettesse la stampa dei DDT come normale pagina web (il risultato della trasformazione XSLT è infatti un documento HTML).
Per sicurezza abbiamo comunque sviluppato l'applicazione su due livelli: un web service ASP.NET 2.0 espone i metodi principali di accesso ai documenti e alle altre informazioni necessarie, mentre un'applicazione web effettua la trasformazione e rende disponibili i documenti agli operatori. In questo modo, qualora la stampa da Internet Explorer di un così grande numero di documenti non avesse dato risultati soddisfacenti, ci sarebbe comunque stato il tempo di sviluppare l'applicazione client e diramarla alle filiali, limitando i ritardi. Tutto il Data Access Layer è stato appoggiato su IBatis (http://ibatis.apache.org/) un progetto molto interessante che avevo già utilizzato per parecchie applicazioni web, forse meno completo di nHibernate ma molto performante e facile da utilizzare.
Dopo il login, l'applicazione identifica la filiale di appartenenza dell'utente, si connette al database di tracciatura delle spedizioni e rende disponibili alla stampa solo i documenti effettivamente tracciati nella filiale (questo per evitare inutili ristampe di documenti). Considerando la criticità dell'ottimizzazione dei tempi operativi (già di per sé impattata dal nuovo compito assegnato, quello di stampare i DDT del cliente), si è cercato di limitare al massimo il numero di clic da effettuare per stampare i documenti. Effettuato il login, normalmente è possibile stampare con solo 4 clic.
Durante la fase di test è però affiorato un problema non facilmente raggirabile: il motore di stampa di Internet Explorer 6 non è potente come quello della versione 7. L'impostazione dei margini non era permantente su tutti i client e non esisteva la possibilità di inquadrare il documento (composto da un logo e da veramente tanto testo) in una sola pagina. Anche modificando l'XSLT del documento non si ottenevano risultati soddisfacenti. Dopo alcuni tentativi, si è deciso di diramare l'aggiornamento a Internet Explorer 7.0 a tutti i client Windows XP interessati da questo sistema e di Mozilla FireFox 2.0 ai client Windows 2000. Problema risolto.
Il test (sia tecnico che operativo) è iniziato con l'invio di 200 documenti al giorno per arrivare ad oggi a 1200 senza intoppi. Nelle prossime settimane il numero di documenti salirà ancora fino a superare la soglia di 2000 documenti al giorno (ovvero tutte le spedizioni del cliente).
Da segnalare un'altro work around resosi necessario per le filiali con più spedizioni: la stampa dall'applicazione web deve essere inviata alla stampante sotto forma di unico documento, questo perché in caso di 300 documenti Internet Explorer per motivi di sicurezza dovrebbe richiedere all'utente 300 conferme di stampa (un'applicazione web non può generare una coda di stampa sul client). Purtroppo alcune stampanti di filiale hanno un buffer limitato e questo faceva rallentare la stampa (in alcuni casi fino a bloccarla) dopo circa 50 documenti se il totale superava i 100 DDT. Per ovviare a questo inconveniente il sistema ora stampa a blocchi di 50 documenti (il numero di clic aumenta, ma è sostenibile dalle filiali).
Devo dire che è stata (ed è tutt'ora in quanto il test non è ancora terminato) veramente una bella esperienza. Ho proposto e implementato con successo alcune nuove tecnologie (Microsoft e non) presso un cliente importante e il risultato è stato molto soddisfacente. L'elemento più evidente sono stati i tempi di sviluppo: 25 giornate uomo totali (utilizzando 1, a volte 2 risorse), 10 per avviare il test.
Accidenti, ho scritto proprio un bel papiro... spero di non avervi annoiato troppo, e spero che questa esperienza possa servirvi nei vostri progetti.
Per chiarimenti o curiosità non esitate a contattarmi.