Ing.Ettore Cefalà
v.Conca del Naviglio,5
20123 - Milano MI
p.IVA: 07902170153
Tel.:0289401482
Fax: 0291703537
info@e-cefala.it

Il progetto Gridview to Excel Export Tool

Problematiche

 
Welcome 7/31/2010

Skip Navigation Links
Home
Offerta
Curriculum
Presentazione del Gridview to Excel Export Tool"
The GEET Site
Word Docx Demo
Web Site Management
ProgettiExpand Progetti









MCAD Certificate 


 

Particolarità del progetto

L'idea era questa: realizzare qualcosa che consentisse di scaricare in Excel quanto visualizzato nella Gridview di una pagina Web. Come fare? Inizialmente ho tentato la strade "tradizionale" di "renderizzare" in Excel il Gridview control visualizzato a video. Sebbene la cosa fosse abbastanza semplice da fare i limiti della soluzione erano evidenti:

  1. L'export funzionava per le sole righe visualizzare nel form
  2. la quantità di HTML prodotta faceva sì che i volumi e di consenguenza i tempi di apertura da parte di Excel del file HTML prodotto non fossero assolutamente accettabili.

Dopo aver tentato numerose altre vie fra le quali "Visual Studio Tools per Office", grazie alla tecnologia "Microsoft Office Open XML"  ho scoperto la possibilità di generare fogli Excel 2003 in formato XML e fogli Excel 2007 in formato XLSX.

The "Solution explorer" of the Gridview to Excel Export Tool Solution

Da qui è nato un progetto alquanto complesso, di cui, sulla destra, si può vedere la finestra del Solution Explorer in Visual Studio 2008.

Ho utilizzato:

  • Class Project per realizzare il prodotto vero e proprio, cioè l'Assembly che installato nella Global Assembly Cache (GAC) del sistema, realizza gli export in Excel 2003 o 2007
  • ASP.NET per realizzare
  • Windows Installer Project per realizzare il package di installazione
  • Console Application Project per parametrizzare opportunamente i vari progetti a seconda della "Configuration" della soluzione
  • Windows Forms Project per realizzare un form di Installazione Licenza

Inoltre ho dovuto utilizzare Sql Server (ma solo per leggere dati dall'Adventure Works database di Microsoft) ed ho fatto una notevole esperienza di XML e di Microsoft Office Open XML.

Nel realizzare il progetto ho dovuto inoltre affrontare e risolvere, il modo economico, anche il problema della "obfuscation" e della "Signature" di tutte le parti di codice installate e Licensing.

Obfuscation

Per la obfuscation ho dovuto presto abbandonare l'idea di utilizzare .Net Obfuscator già presente con funzionalità di base in Visual Studio. Le funzionalità offerte sono veramente minime e non ho trovato supporto sufficiente per la Signature. Inoltre il prezzo del prodotto su Internet si aggirava ai tempi dell'inizio del progetto intorno ai 4000 Euro.

Essendo utente MSDN ho voluto provare i Microsoft Software Licensing and Protection Services di Microsoft che in teoria avrebbe potuto risolvere sia il problema della Obfuscation, sia quello del Licensing. Peccato che, dopo avere eseguito il percorso di demo, come suggerito dal manuale, non fosse più possibile aprire un nuovo progetto di lavoro, nè eliminare o rinominare quello di demo. Risolto questo problema con il personale Microsoft che mi ha fornito un altro User ed un'altra password ho presto scoperto che il sistema non era in grado di offuscare funzioni che utilizzavano parametri passati "byref".

Poiché questo avrebbe comportato la riscrittura ed il test di buona parte del progetto ho preferito abbandonare anche questa strada e tentare altro.

Finalmente, per la sola obfuscation, ho trovato  {smartassembly} che ha reso necessario un pò di lavoro per essere integrato in Visual Studio ma alla fine si è rivelato duttile ed economico. Un suggerimento per chi volesse utilizzarlo: utilizzate i pre-build ed i post-buid events di ciascun progetto per richiamare dei .cmd o, eventualmente un eseguibile scritto appositamente per eseguire la obfuscation.

Signature

Anche per la Signature dei singoli moduli da installare ho dovuto utilizzare i post-build events. Il certificato con cui sono "signed" i vari moduli è stato invece acquistato dalla Thawte.

Licensing

Per il Licensing ho utilizzato un sistema che funziona in modo diverso a seconda del momento

Alla prima installazione del prodotto c'è la necessità di fornire immediatamente una Licenza gratuita che può essere definitiva, se il sistema è Window XP oppure Windows Vista, oppure temporanea se il sistema operativo è Windows Server 2003 oppure Windows Server 2008.

In questo caso il sistema in corso di installazione, individuato il tipo di sistema instaura un colloquio con un un web Service appositamente realizzato che esegue i seguenti passi:

  1. al momento dell'installazione della licenza il Client legge il tipo di sistema operativo, il codice di licenza di Windows e la data e l'ora di installazione. In particolare il numero di licenza Windows e l'orario di installazione costituiscono una chiave univoca per identificare la macchina del cliente
  2. il Client richiede una Licenza temporanea al Web Service
  3. Il Web Service, dopo aver verificato la validità della richiesta, genera un nuovo Codice di Licenza e lo invia al Client
  4. Il Client, in possesso di una Licenza, invia a questo punto  al Web Service una richiesta di installazione
  5. Il Web Service, registrata la richiesta ed effettuati i necessari controlli di coerenza fra Sistema richiedente e Licenza in corso di installazione, genera ed invia al Client una Activation Key
  6. il Client installa la activation Key e quindi trasmette al web Service il segnale di licenza installata.

Quando il Cliente è entrato in possesso di una Licenza a pagamento, dovrà utilizzare un Form, che viene installato contestualmente al prodotto, per effettuare la registrazione e l'attivazione della Licenza.

Questo form instaura con il Web Service un colloquio di questo tipo:

  1. legge il tipo di sistema operativo, il codice di licenza di Windows e la data e l'ora di installazione.
  2. il sistema trasmette i dati letti al passo precedente, oltre il numero di Licenza che l'utente avrà specificato nel form di installazione, al Web Service, facendo richiesta di installazione di una Licenza defintiva a pagamento (solo per Windows Server 2003 e Windows Server 2008)
  3. il web Service, verifica che la Licenza sia valida, che non sia stata installata altrove, quindi genera una Activation Key e la invia al Client
  4. il Client installa la activation Key e quindi trasmette al web Service il segnale di licenza installata.