Desenvolvimento - Visual Basic .NET
Relatórios com Active Reports - Parte 2 - Web
O Active Reports é uma ferramenta da DataDynamics (www.datadynamics.com), totalmente integrada ao VS.net trazendo uma facilidade muito grande na criação de relatórios tanto em aplicações Windows (winforms) e para aplicações Web. Estarei mostrando os dois tipos de aplicação divididos em duas partes. Parte 1 - Windows e parte 2 - Web.
por Alexandre TarifaJá foi mostrado na Parte 1 como exibir relatórios para aplicação Windows e agora será mostrado na Perte 2 como mostrar relatórios em aplicações web. O cenário e o relatório serão os mesmos:
Relembrando
Cenário
Teremos um arquivo XML simples de clientes chamado alunos.xml. Este arquivo xml será meu repositório de dados, ou seja, a fonte de dados que meu relatório buscará para exibir as informações formatadas. O arquivo terá a seguinte estrutura:
<?xml version="1.0" encoding="iso-8859-1" ?> <tblAluno> <aluno> <matricula>00001</matricula> <nome>João Paulo da Silva</nome> <endereco>Rua Bela Moema, 123</endereco> <bairro>Centro</bairro> <cidade>SP</cidade> <estado>SP</estado> <telefone>4359-4857</telefone> </aluno> <aluno> <matricula>00002</matricula> <nome>Ernesto Lopes</nome> <endereco>Rua das tulipas, 45</endereco> <bairro>Tatuapé</bairro> <cidade>SP</cidade> <estado>SP</estado> <telefone>3148-2547</telefone> </aluno> <aluno> <matricula>00003</matricula> <nome>Paulo Manga</nome> <endereco>Rua do Pão, 49</endereco> <bairro>Consolação</bairro> <cidade>SP</cidade> <estado>SP</estado> <telefone>3523-4878</telefone> </aluno> </tblAluno>
Criando Relatório com Active Reports - WebForms
Será um relatório que listará todos os alunos do arquivo XML alunos.aspx. Através de um DataSet que vai ler o arquivo alunos.xml, vamos listar todas as informações formatadas.
Inicie um projeto do tipo Visual Basic e selecione o template ASP.NET Web Application com o nome ActiveReportsWeb.
O primeiro passo é a construção do relatório no Active Reports. Clique com o botão direito do mouse no projeto dentro do solution Explorer, Add, Add New Item. Selecione o template ActiveReportsFile.
É criado um formulário com o formato de um relatório. Os controles que compõe o relatório ficam na Toolbox, no grupo ActiveReports. A utilização dos controles é semelhante à de um formulário normal.
O relatório fica dividido em 3 partes: PageHeader (Topo), Detail (Itens) e PageFooter (Rodapé).
No PageHeader vamos adicionar o título do relatório e as descrições dos itens listados no relatório, conforme abaixo:
No Detail teremos que adicionar os TextBox dos campos de detalhe vinculados ao campo que ele se refere no banco de dados. Para fazer isto, basta vincular a propriedade DataField do textbox de acordo com o nome do atributo no arquivo alunos.xml.
TextBox | DataField |
txtMatricula | Matricula |
txtNome | Nome |
txtEndereco | Endereço |
txtBairro | Bairro |
txtCidade | Cidade |
txtUf | Uf |
txtTelefone | Telefone |
Monte os details conforme abaixo:
No PageFooter vamos adicionar o número de páginas do relatório. Basta adicionar um TextBox chamado txtPagina e altera as propriedades SummaryRunning = All e SummaryTupe = PageCount.
Parte 2
Agora que revimos como montar o relatório temos que montar a chamada para este novo relatório. Vamos criar um formulário chamado frmRelatorio.aspx.
Com o relatório criado, temos que adicionar as referencias do Active Reports.
Adicione a referência Data Dynamics ActiveReports for .NET
Adicione também a referência Data Dynamics ActiveReports Viewer
Para adicionar o controle de visualização de relatórios temos que seguir um caminho não muito agradável (Escovar alguns bits - como diz meu amigo Marcus). Temos que adicionar algumas linhas no HTML da nossa página:
Dentro da TAG FORM, adicione as linhas seguintes:
<OBJECT id="arv" codeBase="arview2.cab#version=2,0,0,1183" height="100%" width="100%" classid="clsid:8569D715-FF88-44BA-8D1D-AD3E59543DDE" viewastext> <PARAM NAME="_ExtentX" VALUE="24712"> <PARAM NAME="_ExtentY" VALUE="13547"> </OBJECT>
Dentro da TAG BODY, adicione as linhas seguintes:
<SCRIPT language="vbscript"> <!-- sub arv_ControlLoaded() arv.DataPath = "frmRelatorio.aspx?ReturnReport=1" end sub --> </SCRIPT>
Dentro da TAG HEAD, adicione as linhas seguintes:
<script language="javascript"> function PrinterConfig(){ arv.Printer.PaperSize = 9; arv.Printer.Orientation = 1; } </script>
Pronto, parece complicado mas não é tanto assim, visto que teremos sempre esta mesma página para receber os relatórios... mesmo tendo 50 relatórios na nossa aplicação sempre esta página que os exibirão.
Após a montagem da página, vamos chamar o código responsável pela exibição do relatório, adicione no form_load do frmRelatorio.aspx o seguinte código:
Dim rpt As New ActiveReport1 "Abre o XML no data Set Dim ds As New DataSet ds.ReadXml(Server.MapPath("\alunos.xml")) rpt.DataSource = ds.Tables(0) If Page.IsPostBack = False Then Dim sReturnReport As String = Me.Page.Request.QueryString("ReturnReport") If (Not sReturnReport Is Nothing) Then If (Not sReturnReport.Trim() = String.Empty) Then Me.Page.Response.Buffer = True Try rpt.Run(True) Catch eRunReport As Exception lblMensagem.Text = eRunReport.Message End Try "Create a memory stream to put the report document RDF in Dim outStream As MemoryStream = New MemoryStream "Save the report document into the memory stream rpt.Document.Save(outStream, DataDynamics.ActiveReports.Document.RdfFormat.AR20) "Move the postion back to the begining of the stream outStream.Seek(0, SeekOrigin.Begin) "Create a byte array buffer to read the memory stream into Dim bytes(outStream.Length) As Byte "Fill the byte array buffer with the bytes from the memory stream outStream.Read(bytes, 0, CType(outStream.Length, Integer)) "Clear anything that might have been written by the aspx page Me.Page.Response.ClearContent() Me.Page.Response.ClearHeaders() "Write the report document byte array to the requestor: Me.Page.Response.BinaryWrite(bytes) "end this request/response Me.Page.Response.End() End If End If End If
Pronto, agora basta executar e seu relatório será exibido na página. Apesar de exigir algum trabalho extra, a partir do primeiro formulário montado, a única alteração que deve ser feita para outro relatório será o DataSet que será carregado no início do código.
Apesar de trazer um certo trabalho esta solução com Active Reports é muito boa pois após uma boa prática de utilização, a produtividade fica muito boa e seu custo é inferior a outras soluções de relatórios.
Para baixar esta aplicação, clique aqui.
Gostaria de agradecer novamente meu amigo David Pomarico (a filhinha dele Yasmin nasceu ontem) pela ajuda na criação do artigo.
Um Abraço
Alexandre Tarifa
www.alexandretarifa.eti.br
atarifa@deloitte.com
ONDE COMPRAR:
Comptools: http://www.comptools.com.br/produto.asp?codproduto=CF-00079
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET