Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Microsoft Reports – Relatórios Embebidos

Os Microsoft Reports são ficheiros XML, com uma extensão diferente (*.rdlc), que guardam o esquema do relatório, imagens embebidas, código personalizado, etc. No entanto, e por serem ficheiros fáceis de editar (usando um simples editor XML ou mesmo através do Notepad), podem ser modificados, alterando com isso, e sem ser necessário compilar a aplicação, o resultado pretendido.

Isto trás algumas vantagens e, obviamente, algumas desvantagens.

Se por um lado conseguimos ver o conteúdo do ficheiro e analisar um eventual problema, não colocamos toda a aplicação num só ficheiro e não aumentamos o tamanho do executável, por outro lado, não garantimos a protecção do relatório. Estes são alguns pontos que devem ser considerados na escolha da opção a usar.

Para se utilizar um relatório embebido no executável, é necessário apenas seleccionar o relatório, na janela Soluction Explorer, e definir na propriedade Build Action como Embedded Resource.

Depois, utilizar uma função semelhante à seguinte, para extrair o relatório embebido para uma Stream.

''' <summary>
''' Extrai dos Resources da aplicação, o relatório para uma Stream
'''
</summary>
''' <param name="reportName">Nome do relatório</param>
Private Function GetReport(ByVal reportName As String) As IO.Stream

    ' Recolhe a informação da Assembly
   
Dim currentAssembly As Reflection.Assembly = _
                Reflection.Assembly.GetExecutingAssembly()

    ' Irá guarda o caminho + nome do ficheiro
   
Dim resource As String = String.Empty

    ' Verifica nos Resources se encontra o relatório pretendido
   
Dim arrResources As String() = _
                currentAssembly.GetManifestResourceNames()

    For Each resource In arrResources
        If resource.Contains(reportName) Then Exit For
    Next

   
' Coloca o relatório embebido na Stream
   
Dim resourceStream As IO.Stream = _
        currentAssembly.GetManifestResourceStream(resource)

    Return resourceStream

End Function

Finalmente, definir como nome do relatório, a Stream retornada pela função, através do método LoadReportDefinition().

Dim rptStream As IO.Stream = GetReport("rptProducts.rdlc")
Me.ReportViewer1.LocalReport.LoadReportDefinition(rptStream)


E já está … um método simples, prático, e que poderá proteger os relatório, caso seja pretendido.

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

0 comentários:

Mensagens Recentes



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico