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:
Enviar um comentário