Introduzione.
Vedremo in questo articolo, come utilizzare tramite la tecnologia .Net ed in particolare in un controllo Reportviewer visualizzare dei report basati su snapshot di reporting Services. I reporting servics, di Sql server sono degli ottimi strumenti per la reportistica, tramite il controllo reportViewer, possiamo visualizzare nelle nostre pagine Aspx ed applicazioni per windows, dei report di una certa professionalità.
A volte, i report per via della mole dei dati o per le varie informazioni, il loro caricamento richiede del tempo, per evitare che l’utente attendi diversi secondi (o minuti) in attesa che il report venga caricato, l’utilizzo dei snapshot (si rimanda alla documentazione ufficiale di Sql Server) ci aiuta in questa problematica, velocizzando di molto il loro caricamento.
Prima di utilizzare nel controllo reportviewer uno snapshot, dobbiamo creare una sua cronologia, per far ciò, aprite la pagina di reporting Services quella di amministrazione, nelle proprietà del report di vostro interesse, nel menu superiore selezionate la voce Cronologia, nella pagina che viene aperta, fate click sulla voce Nuovo Snapshot.
A questo punto si è creato uno snapshot, nella cronologia.
Stesura di codice
Il codice per la gestione dei report, fa uso del servizio web (Asmx) di reporting services. Inserite nel progetto un riferimento al servizio web di reporting services, di norma il servizio web ha il seguente percorso “http://NomeServer/ReportServer/ReportService2005.asmx” dove NomeServer, indica il server in cui si trova il servizio web.
Nel progetto web, fate click con il pulsante destro e tramite il menu di scelta rapida (tasto destra) selezionare la voce aggiungi riferimento web.
Nella pagina in cui si trova il controllo reportViewer, e più precisamente dopo aver impostato la proprietà ReportPath del controllo ReportViewer, si imposta le credenziali dell’oggetto a cui fa riferimento il servizio web (Asmx) e tramite il metodo ListReportHistory, che accetta un solo argomento relativo al path del report, rileviamo una lista di oggetti di tipo ReportHistorySnapshot, di questa lista, la proprietà HistoryId, permette di assegnare al controllo Reportviewer lo snapshot in questione.
Di seguito si riporta il frammento di codice delle suddette operazioni
ReportViewer1.ServerReport.ReportPath = ReportPath;
WSReportService2005.ReportHistorySnapshot[] ListHistorySnapShot;
using (WSReportService2005.ReportingService2005 ReportServices = new WSReportService2005.ReportingService2005())
{
//imposto le credenziali, già impostati precedentemente al controllo Reportviewer
System.Net.NetworkCredential Credenziali = (System.Net.NetworkCredential)ReportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials;
//imposto l'url del servizio web che può essere dinamico
ReportServices.Url = WebConfigurationManager.AppSettings["WsReportingServices"].ToString();
//imposto le credenziali
ReportServices.Credentials = Credenziali;
//Rilevo la lista della cronologia dei SnapShot
ListHistorySnapShot = ReportServices.ListReportHistory(ReportPath);
}
if (ListHistorySnapShot.Length > 0)
ReportViewer1.ServerReport.HistoryId = ListHistorySnapShot[ListHistorySnapShot.Length - 1].HistoryID;
Conclusioni
Si è visto come visualizzare dei report basati su Snapshot, in modo che il caricamento di tali report è molto ma molto più veloce. Non si è discusso della creazione e gestione della cronologia dei snapshot, che rimandiamo ai siti qui di seguito, ma una tecnica in .Net di come gestirli.
Qui di seguito trovate dei siti per iniziare a comprendere il funzionamento e l’utilizzo dei snapshot.
http://technet.microsoft.com/it-it/library/dd283119(SQL.105).aspx
http://msdn.microsoft.com/it-it/library/aa256337(en-us,SQL.80).aspx
http://msdn.microsoft.com/it-it/library/aa179676(en-us,SQL.80).aspx