Introduzione alla reportisticaLo sviluppatore è sempre stato abituato nel tempo a lavorare sulla business logic delle proprie applicazioni, alla gestione dei dati nei database e alla programmazione dell'interfaccia utente per semplificarne l'uso.
Da un po' di tempo a questa parte i Database stanno effettivamente "scoppiando" nel senso che la mole di dati che viene inserita continua ad aumentare giorno per giorno e giustamente il cliente (di solito gli alti gradi) vuole avere dei resoconti dettagliati in formato cartaceo o elettronico in cui vengono raggruppati tutti i dati in modo logico elaborati e visualizzati.
E' questo un caso in cui potrebbe venire comodo un Report.
Crystal Reports e Visual Studio .NETNelle precedenti versioni degli strumenti di sviluppo il supporto alla produzione di Report avanzati è sempre stato molto debole quasi la sua presenza non si avvertiva neanche.
Finalmente con l'avvento di Visual Studio .NET abbiamo a disposizione un vero prodotto per la produzione di Report avanzati.
Il prodotto in questione che è integrato nell'ambiente si chiama
Crystal Reports e guardando gli assemblies pare di capire che sia la versione
9.1.
Crystal Reports è un prodotto di
Crystal Decisions molto conosciuta perchè da anni investe su prodotti dedicati alla reportistica.
Le librerie e i controlli offerti da Crystal sono veramente potenti permettono addirittura di integrare e offrire report:
- In applicazioni Windows Forms
- In applicazioni Web quindi usufruibili dal browser
- E addirittura sottoforma di Web Services
I risultati che si ottengono sono stupefacenti e si raggiungono in poco tempo come potete vedere nell'immagine qui sotto:
Un report via Web
Creazione Report tramite WizardAllora prima di cominciare il nostro esempio volevo solo ricordavi alcuni requisiti di cui abbiamo bisogno. Useremo come base di dati il classico
Northwind su SQL Server. Per ora quindi ci collegheremo a SQL ma prossimamente vedremo anche come collegarci ad Access, anche se la procedura è simile e ognuno di voi capirà da solo come fare! :)
Si parte costruendo semplicemente un progetto di tipo Web con linguaggio C# (se preferite potete usare anche VB.NET).
Premendo con il tasto destro sul nome del nostro progetto nel "Solution Explorer" scegliete "Add" e di seguito "Add New Item...". Dalla finestra che compare andremo a scegliere il tipo di file "Crystal Report" che hanno estensione
.rpt e gli diamo come nome
Report.rpt.
Aggiunta di un Report al progetto
Diamo ok alla finestra, automaticamente verranno aggiunte diverse references al progetto di Crystal Decisions, verrà aggiunto il nostro file Report.rpt al progetto e apparirà uno Wizard per la composizione del progetto. (Assieme allo Wizard di solito appare anche una form di registrazione, è sufficiente cliccare in fondo a destra "Register Later").
La situazione in questo momento dovrebbe essere quella rappresentata dall'immagine qui sotto:
Il Wizard di composizione Report
Nel nostro report avremo un riepilogo degli stati che hanno effettuato almeno un ordine del periodo di riferimento (l'ultimo quadrimestre) e un grafico a torta o a barre che riassume la situazione in modo da rappresentare gli stati che hanno fatto più ordini. (Useremo una View apposita già presente nel DB chiamata
Quarterly_Orders)
NOTA: La procedura seguente è da seguire alla lettera, non potendo rappresentare qui tutti gli stati del Wizard.
Diamo Ok alla finestra principale del Wizard, comparirà una sequenza di passi e linguette (Data, Fields, Group, ecc.) che dovremo compilare come vedete qui sotto:
I vari passi del Wizard
Linguetta Data: E' qui che effettuiamo la connessione al nostro database SQL. Aprite dove c'è scritto "OLE DB (ADO)" e fate doppio click su "Make New Connection", scegliete dalla finestra che apparirà il driver "Microsoft OLEDB Provider for SQL Server" e proseguito compilando il nome del database da utilizzare e le credenziali da usare.
Terminata questa procedura sarà aggiunta come connessione disponibile appena sotto "Make New Connection", da lì potete aprire i nodi fino ad arrivare alle viste, scegliete la vista "Quarterly_Orders" e premete "Insert Table".
I vari oggetti del Database
Linguetta Fields: Proseguiamo con il nostro Wizard. In questa linguetta sceglieremo i campi che andranno a comporre il nostro Report. Li inseriamo tutti per questo esempio.
Linguetta Group: Questa è una linguetta di fondamentale importanza. E' qui che scegliamo come raggruppare i dati, secondo quale campo. Abbiamo detto che vogliamo un dettaglio in base alle nazioni quindi aggiungiamo il campo "Quarterly_Orders.Country"
Linguetta Total: Da qui possiamo tenere traccia e calcolare totali e subtotali, anche in questo caso selezioniamo e aggiungiamo il campo Country che ci servirà poi anche per il grafico a torta. Un piccolo dettaglio qui, però, vedete che in basso a destra c'è "Summary Function" ossia la funzione da utilizzare per conteggiare i subtotali, di default viene scelto Sum ma noi abbiamo bisogno della "Count" quindi provvedete a sostituire.
Linguetta Chart: Saltate subito a questa linguetta e scegliete il grafico che più vi aggrada, consiglio a barre orizzontali o a torta. Io scelgo il tipo "Doughnut" molto carino, sembra una ciambella, un grafico a torta bucato in pratica. Da questa linguetta potete anche personalizzare altre cose come il titolo del grafico e così via.
Direi che può bastare per ora, potete premere sul pulsante "Finish" per terminare il Wizard.
Il risultato sarà simile a quello mostrato qui sotto.
Il Designer di Crystal integrato in VS .NET con il nostro Report
Se qualcuno ha già usato le funzioni di Reportistica di Microsoft Access noterà che è molto simile. Infatti ci sono sul form i campi che abbiamo selezionato (non valorizzati). Il grafico sarà popolato così come i dati successivi solo durante il runtime dell'applicazione.
Integrazione del Report dentro la pagina ASP.NETAndremo ora a vedere come inserire o far leggere il nostro Report al Server Control che inseriremo nella pagina Web. Aprite pure la pagina Webform1.aspx in modalità "Design" creata di default dall'ambiente.
Sulla sinistra apriamo la finestrella "ToolBox" dove ci sono gli oggetti disponibili, andiamo sulla categoria "WebForms" e trasciniamo sulla Form il controllo "CrystalReportViewer".
Passiamo ora al codice. Innanzitutto, è necessario aggiungere (sempre che non sia già presente) il riferimento al namepspace
CrystalDecisions.Shared; in questo modo:
using CrystalDecisions.Shared;
Continuiamo nel nostro percorso, ora è necessario aggiungere un handler per l'evento
Init della nostra WebForm.
E' da notare che nonostante l'accesso al Database sia già stato effettuato precedentemente durante la composizione del report, nel file .rpt non restano immagazzinate le credenziali quindi bisognerà ridefinirle nel codice.
Nel namespace
CrystalDecisions.Shared c'è appunto una classe
TableLogOnInfo di cui creeremo un'istanza, specifichiamo tutti i dati fondamentali per l'accesso al database e alla fine la aggiungeremo tramite il metodo
Add al nostro Crystal Report Viewer.
In questo modo eviteremo un problema molto comune, che appare sottoforma di messaggio "User Login Failed". Il codice è il seguente:
private void WebForm1_Init(object sender, System.EventArgs e)
{
//Instanziamo la classe e creiamo un nuovo oggetto
TableLogOnInfo credentials=new TableLogOnInfo();
//Completiamo le proprietà con i nostri parametri per l'accesso a SQL
credentials.ConnectionInfo.DatabaseName="Northwind";
credentials.ConnectionInfo.UserID="sa";
credentials.ConnectionInfo.Password="sa";
credentials.ConnectionInfo.ServerName="DELL";
credentials.TableName="Quarterly_Orders";
//Aggiungiamo le credenziali al Report Viewer
CrystalReportViewer1.LogOnInfo.Add(credentials);
//Indichiamo al Report Viewer di caricare il Report creato (Report.rpt)
CrystalReportViewer1.ReportSource=Server.MapPath("Report.rpt");
}
Siamo al termine del nostro esempio, ora per farlo funzionare è sufficiente premere Play in VS.NET.
Il risultato sarà simile a questo:
Il report in esecuzione via Web
Come potrete notare il Server Control di Crystal è molto potente. Addirittura c'è la possibilità di fare un
drill-down sui dati. Ossia cliccando sulla sinistra, dove c'è la lista degli Stati, si potranno vedere solo i dati relativi allo stato selezionato, cosa possibile anche cliccando sulle varie aree colorate nel grafico a torta!
Nella parte superiore del controllo c'è anche una toolbar (che si può anche nascondere) per scorrere avanti e indietro le pagine, salire di livello quando si effettua un drill-down oppure fare degli zoom addirittura a diverse gradazioni.
ConclusioniMi sembra di aver messo sufficiente carne sul fuoco per questo articolo. Come vedete la potenza di Crystal Reports è veramente incredibile. In poco tempo e poche istruzioni si riescono ad ottenere risultati di successo.
NOTA: Come vedrete la qualità delle immagini dei grafici è piuttosto bassa, proprio per risparmiare byte che durante trasferimenti via Web possono risultare lenti. Infatti vengono salvate a 96dipi. Nel box qui sotto degli articoli collegati ci sono le istruzioni su come migliorarne la qualità ed altri riferimenti su come produrre altri tipi di report per esempio in Excel.
Potete scrivere eventuali commenti sempre nel box qui sottostante qualora aveste problemi.