Archivio

Archivio per la categoria ‘reporting services’

Report con MS Reporting Services facilmente adattabili a clienti diversi

8 luglio 2010 MarcoB Nessun commento

Scenario: stiamo lavorando ad un’applicazione .NET che verrà installata presso numerosi clienti e dobbiamo dotarla di stampe e reportistica che abbiano una struttura comune e aggiornabile, uguale per tutti i clienti. Allo stesso tempo ogni report dovrà essere facilmente personalizzato con colori, testi e loghi per adattarlo ad uno specifico cliente. Quando rilasceremo una nuova versione di tale report non vorremo perdere le personalizzazioni.

Utilizzo un progetto Visual Studio di Business Intelligence per i report (estensione rptproj), con le definizioni dei report nei file rdl.

Una tecnica semplice consiste nel portare all’esterno del report ogni elemento da modificare: un’immagine, un testo con il nome del cliente, ma anche un valore booleano con il quale possiamo dire al motore di rendering del report che un elemento deve essere nascosto o apparire. In pratica si può passare al report qualsiasi valore che possa entrare in un’espressione di Reporting Services.

Per passare tali valori differentemente da un’istallazione ad un’altra ho utilizzato una stored procedure che potremmo chiamare “Impostazioni”, con all’interno una select semplice, come la seguente:

SELECT 'Puntoit Servizi Informatici' as Nome, --nome del cliente
 'Via Stefanardo da Vimercate 19, 20128 Milano' As Indirizzo,
 '#1c3a70' as Colore1, --per titolo e elementi evidenziati
 'DarkGray' as Colore2, --per nome e indirizzo e ulteriori elementi evidenziati
 CAST(1 as bit) as Logo --1 visualizza, 0 nasconde il logo in alto a dx

Si crea un set di dati nel report che vada a leggerla, impiegando i campi in espressioni del report. Come si vede, non solo testo, ma anche colori e bit per visualizzare o meno il logo.

Per le immagini, ad esempio il logo, il lavoro è leggermente diverso. Si posiziona nel report un controllo immagine che punta ad un’immagine esterna con proporzioni definite, ad es. 3 di larghezza x 1 di altezza, con un nome fisso (“logo3x1.jpg”). Si crea un’immagine con un logo neutro, salvandola nella cartella del progetto Visual Studio dove risiede anche il file di definizione del report rdl.

L’ultima nota riguarda i colori. Anch’essi li ho personalizzati passandoli tramite la stored procedure.

E ora mettiamo tutto insieme. Una volta pubblicato il report si dovrà creare o modificare la stored procedure che genera i dati parametrizzati ed eventualmente sostituire l’immagine generica “logo3x1.jpg” con una con lo stesso nome contenente il logo del cliente. Il gioco è fatto. Se domani pubblicheremo una nuova definizione del report, con ad esempio una colonna in più in una tabella, lo potremmo fare per tutti i clienti, che vedranno la colonna in più e manterranno logo, colori, e testi personalizzati.

Ma attenzione ad un fastidioso limite del motore di rendering. Non è possibile inserire dati provenienti dall’esterno nella testata e nel piede del report. Se devono essere messi lì la cosa più semplice è creare parametri nella definizione del report e passarli tramite la query string che lancia il rendering.

Share