Criando relatórios com Jaspersoft Studio - Parte 3: tabela de telefones

Boa noite. Continuando a nossa série de artigos sobre Jaspersoft Community Studio nessa parte iremos adicionar uma tabela ao nosso relatório clientes.

Esta tabela se encarregará de mostrar os telefones relacionados ao cliente. Observe a Figura 1 como está nosso relatório cliente:


Figura 1 - Relatório Clientes

O atual relatório de clientes está mostrando os dados como uma lista, um registro após o outro, e precisamos alterá-lo para termos uma visão mais clara das informações. 

Nossa primeira é alteração é expandir nosso Detail 1 para 100px para termos espaço disponível para fazermos as demais alterações. 

No painel a esquerda Outline, clique em Detail 1. No painel a direita Propriedades, altere o valor do campo Height e para 100px.

Veja a figura 2 como ficou nosso relatório clientes:


Figura 2 - Expandindo a Band Detail

Como temos mais espaço para trabalhar, nosso objetivo é deixar os static text e os text field juntos para visualizarmos os registros em forma de ficha de um cliente.

Clique no static text, código, nome e data de nascimento na band Column Header e os arraste para a band Detail 1. 

Veja nosso relatório após as alterações na figura 3:


Figura 3 - Colocando os static text na Band Detail 1


Você percebeu que desocupamos a Band Column Header e como não vamos mais utilizá-la iremos exclui-la.

Clique com o botão direito na band Column Header e clique em Delete. Observe a figura 4:


Figura 4 - Excluindo a Band Column Header


Como temos mais espaço para trabalhar com nosso Detail 1 iremos posicionar nossos campos para uma melhor visualização. 

Clique nos campos e os arraste organize-os como a figura 5:


Figura 5 - Organizando os campos


Chegando a esse ponto do tutorial já podemos adicionar nossa tabela. Antes vamos falar um pouco sobre as vantagens e desvantagens que temos ao usar uma tabela em um relatório.

A vantagem da tabela é que terá as informações organizadas e um DataSet exclusivo para trabalhar com estes dados.  Você se depara com diversos casos onde uma ou duas informações estarão em uma tabela filha e a tabela poderá resolver essa questão.

A desvantagem na tabela é que você precisa trabalhar com linhas e colunas isso retira um pouco da sua liberdade na hora de espalhar os campos na tela. Por isso muitas pessoas as vezes ficam na dúvida entre usar tabela e subrelatório. O subrelatório existe para suprir essa desvantagem da tabela, ambos tem a mesma função porém o subrelatório lhe fornece mais liberdade para colocar os campos da forma que desejar e não se limita a linhas e colunas como a tabela. Falaremos mais sobre subrelatório no decorrer da série de artigos.

No nosso exemplo, a tabela pai clientes tem um relacionamento OneToMany com a tabela filha telefones. Como não sabemos quantos números de telefone residencial, comercial ou celular da operadora vivo, claro ou tim o cliente vai ter iremos colocar estas informações em uma tabela com o objetivo de organizar estes dados.

No painel a direita Palette, clique no componente Table e arraste ao Detail 1. Veja a figura 6:


Figura 6: Adicionando o componente Table


O assistente para adicionar tabela será executado. 

Na primeira etapa, você tem as opções criar um novo Dataset ou usar um Dataset existente, essa segunda opção só estará liberada se você tiver criado um dataset por meio de outro componente.

Selecione a primeira opção criar novo Dataset conforme a figura 7:


Figura 7 - Table Wizard 1ª etapa


Na segunda etapa, dê o nome Telefone ao DataSet e selecione a opção Create new DataSet from a connection or Data Source. Assim o assistente vai permitir que criemos uma nova query SQL para buscar estes dados e reservará um DataSet para estes dados.

Veja a figura 8:

Figura 8 - Table Wizard 2ª Etapa


Na terceira etapa, em Data Adapter selecione o localhost onde estão nossas tabelas. No painel  a esquerda, o assistente irá mostrar as conexões disponíveis no seu Jaspersoft Studio. 

Digite a query "SELECT id, ddd, numero, tipo, id_cliente FROM jaspersample.telefone". Ela se encarregará de buscar estes dados de acordo com o id_cliente gravado no banco de dados.

Neste momento não iremos passar o parâmetro id_cliente, isso será feito quando encerrarmos o assistente de criação de tabelas.

Veja a figura 9 a terceira etapa do assistente:


 Figura 9 - Table Wizard 3ª Etapa


Na quarta etapa fields, passe todos os campos do painel da esquerda para a direita. Veja a figura 10:


Figura 10 - Table Wizard 4ª Etapa


Na quinta etapa Group By, mantenha todos os campos no painel a esquerda. Não iremos agrupar nenhum campo por isso não altere nada apenas avance o assistente conforme a figura 11:


Figura 11 - Table Wizard 5ª Etapa


Na sexta etapa, selecione a opção "Use same connection used to fill the master report". Selecionando essa opção, nossa tabela pegará as informações da conexão do relatório principal.

Veja a figura 12:


Figura 12 - Table Wizard 6ª Etapa


Usando a mesma conexão do relatório principal não precisaremos refazer o processo de configuração de conexão. 

Observe que é possível usar outro banco de dados por meio da opção User another connection. Isso é util quando o caso necessita usar dois banco de dados para exibir os dados.

Na sétima etapa Table Columns, passe os campos ddd, numero, tipo do painel da esquerda para a direita. O assistente irá criar as colunas desdes campos automaticamente facilitando nosso trabalho.

Observe a figura 13:


 Figura 13 - Table Wizard 7ª Etapa


Na oitava etapa não iremos alterar o estilo sugerido pelo assistente. 

Como no relatório, a tabela tem as bands Table Header, Column Header, Group Header, Group Footer, Column Footer e Table Footer.

No nosso exemplo deixaremos apenas a opção Add Table Header habilitada. Assim poderemos colocar um título na tabela e as informações dos dados serão exibidas na sequência evitando colocar títulos nos cabeçalhos dos campos.

Como esta é a última etapa, finalize o assistente. Veja a figura 14:


Figura 14 - Table Wizard 8ª Etapa


Nossa tabela foi criada. Se a tabela expandir o tamanho do Detail 1, diminua o componente table e altere o espaço do Detail 1 para 200px como fizemos anteriormente.

Observe na figura 15 como está nosso relatório:


 Figura 15 - Tabela gerada com sucesso


Clique duas vezes no componente Table para você poder editar a tabela.

Observe que ao editar o componente Table o Outline mostra apenas as opções do componente. Isso te fornece total liberdade para trabalhar com as células da tabela. Veja a figura 16: 


Figura 16 - Outline do componente Table

Agora vá ao painel da direita Palette, clique no componente Static Text e o arraste para o cabeçalho da primeira coluna. 

Observe atentamente que o local onde o componente será deixado é realçado com um cor roxa. 

Veja a figura 17:


Figura 17 - Adicionando um Static Text na coluna da Tabela


Agora clique no static text o posicione para que o mesmo preencha toda a célula da coluna. 

Vá ao painel da direita Propriedades, clique na guia Static Text. Digite Telefone na propriedade Text. Em alinhamento clique em Center e Middle. Selecione o tamanho da fonte 12 e negrito.

Veja a figura 18:


Figura 18 - Static Text formatado


Agora selecione os campos Text Field da linha do meio, vá ao painel da direita Propriedades, clique na guia Text Field. Em alinhamento clique em Center e Middle. Veja a figura 19:


Figura 19 - Text Field formatado


Observe que cada componente tem sua respectiva guia no painel Propriedades. Isso é importante quando tiver que aplicar uma formatação ao componente.

Agora que você sabe o processo de formatação, altera o campo Static Text Telefone para DDD e adicione mais dois Static Text como Número e Telefone e os deixe formatado.

Em seguida, vamos expandir o espaço das colunas para que as informações sejam exibidas corretamente. 

Clique no cabeçalho da coluna do meio, vá ao painel da direita Propriedades, clique na guia Cell. Em Column Width digite 125 px.

Clique no cabeçalho da coluna da direita e repita o procedimento. Em Column width digite 150 px.

Com o espaçamento das colunas aumentado você terá que dimensionar os Text Field para que ocupem todo o espaço da célula.

Veja a figura 20:


Figura 20 - Colunas redimensionadas


Agora que nossa tabela está formatada, vamos alterar a query do nosso DataSet para buscar apenas os dados de um cliente.

Clique no botão DataSet and Query editor dialog como mostra a figura 21:



Figura 21 - DataSet and Query editor dialog


Na tabela DataSet and Query Dialog, você tem liberdade para alterar a query que vai buscar os dados no banco de dados. Aqui você adicionará também os parâmetros necessários. 

Na figura 22, observe a query atual na tela do DataSet and Query Dialog:


Figura 22 - DataSet and Query Dialog


Agora iremos adicionar o parâmetro necessário para buscar os dados de apenas um cliente. 

Clique na guia Parameters. Você verá diversos parâmetros desça a barra de rolagem até o final, clique no botão Add. Digite o nome idCliente, marque como true a coluna is for Prompt e altere o Class Type para java.lang.Integer.

Observe o resultado na figura 23:


Figura 23 - Adicionando o parâmetro idCliente

Agora altere a query para SELECT id, ddd, numero, tipo, id_cliente FROM jaspersample.telefone WHERE id_cliente = $P{idCliente}. Observe que ao passar o parâmetro vamos buscar apenas os telefones de um cliente. Veja a figura 24:

Figura 24 - Alterando a query



Clique no botão Read Fields para o relatório validar as alterações. Depois clique em OK para fechar o DataSet and Query Dialog.


Agora vamos visualizar a tela principal do relatório, clique no botão Main Report. 


Clique na Table, vá ao painel da direita Propriedades. Na guia Appearance, desmarque Print Repeated Values e marque Remove Line When Blank. Fazendo isso a tabela não exibirá registros duplicados e a tabela não será exibida se não tiver registros de telefone no banco de dados.


Ainda com a Table selecionada, redimensione para que ocupe todo o espaço da Detail 1. Veja a figura 25 as modificações feitas:
Figura 25 - Redimensionado e alterando a aparência da Table

Agora vamos passar o parâmetro do DataSet principal para o DataSet da table. Assim a tabela buscará apenas os dados do cliente.
Com a Table selecionada, vá ao painel da direita Propriedades. Clique na guia DataSet e clique no botão Parameters. Veja a figura 26:

Figura 26 - Propriedades da Table


Será exibida a janela Properties DataSet Parameters, clique no botão Add. Veja a figura 27:


Figura 27 - Janela Properties DataSet Parameters


Ao clicar no botão Add será exibida a janela Configure the Parameter. 

Veja que o Parameter name é a lista que contém todos os parâmetros que você pode observar na figure 23 onde mostra os parâmetros da Table. 

Nessa lista selecione o idCliente. No Parameter Expression, clique no ícone a direita da caixa de texto conforme a figura 28: 


Figura 28 - Configure the Parameter


Na janela Expression Editor, na coluna da esquerda clique em Fields. Os campos serão exibidos na coluna do meio, clique e arraste o campo id Field Integer. Observe que o campo foi adicionado ao campo texto na parte superior.
 
Veja a figura 29:


Figura 29 - Expression Editor


Clique em finish para fechar o Expression Editor. Observe na figura 30 o Configure the Parameter mostrando o id no Parameter Expression:


Figura 30 - Configure the Parameter


Clique em OK para fechar o Configure the Parameter. Veja que o idCliente aparece na janela Properties DataSet Parameters na figura 31:


Figura 31 - Properties DataSet Parameters


Na figura 32 observe nosso relatório finalizado:

Figura 32 - Relatório Clientes finalizado


Clique na guia Preview para executar o relatório. 

Observe que ele mostra os telefones após o registro do Cliente.

Na figura 33 veja o relatório sendo executado:

Figura 33 - Preview do Relatório Clientes


Aqui encerramos nossa terceira parte sobre relatórios no JasperSoft. Acredito que você não terá dificuldades em trabalhar com tabelas daqui para frente. Qualquer dúvida poste nos comentários.

Até mais

Compartilhe no Google Plus

About Tiago Sousa

Desenvolvedor/professor com foco em Java. Bacharel em Sistemas de Informação pela Universidade de Franca (Unifran) e Pós Graduado em DW Java pela Universidade de Araraquara (Uniara). Está no mercado de TI há 12 anos, possui conhecimentos gerais em diversas tecnologias.