ads

Pagine bianche nella stampa di un report in Reporting Services

Aprile 22nd, 2009 No Comments   Posted in Programmazione, Windows

Ancora un piccolo tips sulle stampe in Microsoft Reporting Services. A volte può capitare che inviando un report in stampa (o anteprima) o esportandolo in un formato (tipo il pdf), alla fine di ogni pagina ci sia una pagina vuota o bianca.

Questo capita, nel 90% dei casi, a causa di una errata impostazione dei margini e del corpo della pagina in fase di design. Questo causa che il corpo di pagina sia troppo grande per contenere tutti gli elementi del report. La regola da rispettare quando si crea un nuovo report è la seguente:

Body Width <= Page Width – (Left Margin + Right Margin)

Quello che bisogna tener a mente è che esiste una area del report, chiamata Usable Area, che rappresenta lo spazio disponibile per disegnare il report dopo aver tolto dallo spazio totale di pagina i margini, l’intestazione e il piè di pagina. In pratica le dimensioni dell’Usable area sono:

X = Page.Width – (Left Margin + Right Margin + Column Spacing)

Y = Page.Height – (Top Margin + Bottom Margin + Header Height + Footer Height)

Questi fattori sono importanti da tener a mente quando si crea un nuovo report in modo da non avere brutte sorprese in fase di stampa o di anteprima.

Ti piace questo articolo? Condividilo:

Visualizzare Report di Reporting Services con Web Services e i problemi con l’impostazione internazionale del client (Locale)

Aprile 21st, 2009 No Comments   Posted in Programmazione

Torno ancora una volta a parlare di Microsoft SQL Server Reporting Services. Reporting Services mette a disposizione due interessanti web service per la visualizzazione e la manipolazione programmatica di report RS pubblicati sul server. In questo modo è possibile customizzare la visualizzazione e la gestione dei report all’interno della nostra applicazione .NET.

Detto questo può capitare di incappare in un fastidioso problema di localizzazione delle date e delle valute che potrebbero essere visualizzate in inglese invece che nella lingua impostata come default. Come si evince da un articolo sula KB di Microsoft il problema è noto e risiede nella mancata comunicazione dell’Accept-Language HTTP nell’header delle chiamate SOAP fatte dal client.

Secondo l’articolo, per sopperire al problema, è sufficiente aggiungere il seguente pezzo di codice all’interno del file Reference.cs o (.vb):

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest wr = base.GetWebRequest(uri) as HttpWebRequest;
    wr.Headers.Add("Accept-Language:" + CultureInfo.CurrentCulture.Name);
    return wr;
}

Nel mio caso ha funzionato 😉

Ti piace questo articolo? Condividilo:

Problemi con SQL Server 2005 Service Pack 3, bpacmd.exe non trovato e codice errore 0x7370

Aprile 6th, 2009 1 Comment   Posted in Programmazione, Windows

Da poche settimane è disponibile il Service Pack 3 di Microsoft SQL Server 2005 nelle sue varie declinazioni. Il service pack 3 porta con se un numero notevole di aggiornamenti e di correzioni importanti. Per un elenco completo consultare l’apposita pagina sul sito di Microsoft Support List of the bugs that are fixed in SQL Server 2005 Service Pack 3.

Può capitare, però, di incappare in uno strano errore in fase di aggiornamento del componente Reporting Services di SQL Server. L’aggiornamento se effettuato tramite Microsoft Update ritorna semplicemente il codice di errore 0x7370, mentre se eseguito manualmente con il file di setup ritorna l’errore –1 con messaggio vuoto. Cercando il codice di errore 0x7370 sia sul sito di Microsoft che su Google, non viene trovato niente di rilevante o comunque niente che sia direttamente correlato al service pack di sql server.

In questo caso ci viene in soccorso l’Event Viewer o altrimenti detto nella versione italiana Visualizzatore Eventi. Nel visualizzatore eventi, infatti, è necessario cercare un generico errore NET Runtime 2.0 Error Reporting dove si specifica che è impossibile trovare il file bpacmd.exe. Sul file di log di installazione “RS_1.log” viene specificato che:

04/06/2009 14:44:09 RS System.IO.FileNotFoundException: Impossibile caricare il file o l’assembly ‘BPAClient, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91’ o una delle relative dipendenze. Impossibile trovare il file specificato.
Nome file: ‘BPAClient, Ve

Una breve ricerca su internet e scopriamo che il file bpacmd.exe è un programma utilizzato in fase di aggiornamento anche noto con il nome esteso di SQL Server 2005 Best Practices Analyzer. In pratica il programma di aggiornamento non riesce a trovare e quindi a caricare la dll BPAClient.dll!

Per risolvere questo problema è sufficiente quindi completare i seguenti passi:

  1. C:\{Cartella Programmi}\Microsoft SQL Server\90\Setup Bootstrap\Bin selezionare tutti i file presenti nella cartella e copiarli nella cartella padre C:\{Cartella Programmi}\Microsoft SQL Server\90\Setup Bootstrap\
  2. Riavviare l’installazione del Service Pack 3.

Non è ancora chiara l’origine del problema ma a quanto pare non esiste una via ufficiale per risolvere l’errore. Nel frattempo questo piccolo tip potrebbe tornarvi utile 😉

Ti piace questo articolo? Condividilo:

Rich TextBox in Microsoft SQL Server Reporting Services 2005

Marzo 13th, 2009 No Comments   Posted in Programmazione

Microsoft SQL Server Reporting Services 2005 (SSRS2005), il sistema di Microsoft per la reportistica e la business intelligence, soffre di una grave carenza: il componente Rich TextBox. Non è infatti possibile visualizzare all’interno di un report un testo formatto in RTF (RichTextFormat). Questo è un grosso limite della versione 2005, dato anche dal fatto che Crystal Report offre questa funzionalità sin dalle prime versioni.

Per fortuna l’enorme comunity di sviluppatori attorno al mondo Microsoft ci viene in aiuto. Girando tra forum e blog ho scoperto una valida soluzione a questo problema, anche se affetta da qualche piccola controindicazione. La soluzione consiste in un componente custom (una dll per intenderci) che, una volta registrato in SSRS2005, visualizza un testo Rtf come una immagine.

Il procedimento è molto semplice. Nell’allegato a questo articolo trovate un file RichTextImager.dll. RichTextImager è una libreria sviluppata in .Net 2.0 e all’interno dell’allegato trovate tutta la solution originale. Potete modificare la solution e ricompilarla per ottenere una versione modificata del componente. I passi da seguire sono:

  1. Copiare la dll in  C:\{Cartella Programmi}\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies in modo da poter utilizzare la libreria all’interno del designer.
  2. Copiare la dll in  C:\{Cartella Programmi}\Microsoft SQL Server\MSSQL.(n)\Reporting Services\ReportServer\bin (dove N è un numero che dipende dalla vostra installazione)
  3. Modificare il file C:\Program Files\Microsoft SQL Server\MSSQL.(n)\Reporting Services\ReportServer\rssrvpolicy.config e inserendo il testo:
  4. "UnionCodeGroup"
       version="1"
       PermissionSetName="FullTrust"
       Name="RTF_Converter"
       Description="A special code group for my custom assembly.">
      "UrlMembershipCondition"
        version="1"
        Url="C:\{Cartella Programmi}\Microsoft SQL Server\MSSQL.(n)\
             Reporting Services\ReportServer\bin\RichTextImager.dll"
      />
    
  5. Aprire il proprio progetto di reportistica in Microsoft Visual Studio 2005. Aprire il report su cui si vuole intervenire. Aggiungere in Report >Report Properties > References l’assembly RichTextImager.
  6. In Report > Report Properties >Code aggiungere il seguente pezzo di codice:
  7. Public Function GetRTFImage(ByVal rtfText as String) As Byte()
        Dim rtfConv As New RTFConverter()
        rtfConv.Rtf = rtfText
        return RTFConverter.ConvertImageToByteArray(rtfConv.PrintToImage(500,50))
    End Function
  8. Aggiungere al report un’immagine e impostare la proprietà Source a Database.
  9. Impostare la proprietà dell’immagine  MIMEType a image/bmp
  10. Impostare la proprietà Value a =Code.GetRTFImage(Fields!RTFText.Value)

Ci sono ovvie controindicazioni a questo approccio e sono:

  1. Non è possibile selezionare il testo RTF perché è un’immagine e a volte l’immagine risulta sgranata.
  2. Bisogna registrare una dll custom su SSRS2005 con eventuali problemi di deploy e di security.
  3. Ogni report che deve visualizzare testo RTF deve referenziare un dll esterna e deve avere del codice custom al suo interno, con tutte le problematiche di manutenibilità correlate.

Però come si dice in questi casi: sempre meglio che niente…

Allegato: richtextimager

Ti piace questo articolo? Condividilo: