Mostrando postagens com marcador IREPORT. Mostrar todas as postagens

segunda-feira, 18 de abril de 2016

Relatório iReports usando JRBeanCollectionDataSource #2


Fala galera!

Vamos continuar nosso post onde fazemos um Relatório iReports usando JRBeanCollectionDataSource.

Pois bem, no último post criamos o projeto e desenvolvemos as classes Cliente e ClienteFactory (caso não tenha o arquivo anterior, acesse o repositório Github para obter o código).

Hoje vamos desenvolver a classe principal que será responsável por executar o método que irá gerar o relatório, assim como será nossa classe para teste. Em seu projeto você poderá adicionar o método de impressão de relatório em outra classe de sua preferência e de acordo com o contexto de sua aplicação.

Aqui chamamos a classe principal de ReportDevIsComing. Veja o código a seguir:

Classe ReportDevIsComing

package br.com.deviscoming;

import java.net.URL;
import java.util.List;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;/**
 *
 * @author renan.ramos
 */
public class ReportDevIsComing {

    /**
     * @param args the command line arguments
     */        
    public static void main(String[] args) {
        new ReportDevIsComing();
    }

    public ReportDevIsComing() {
        execute();
    }

    private void execute() {
        ClienteFactory clienteFactory = new ClienteFactory();
        List<cliente> lista = (List) clienteFactory.getCliente();
        geraRelatorio(lista);
    }            
        
    private void geraRelatorio(List<cliente> lista) {
        try{            
            URL arquivo = getClass().getResource("/br/com/deviscoming/relatorio/relDevComing.jasper");                                  
            JasperReport report = (JasperReport) JRLoader.loadObject(arquivo);
            JasperPrint print = JasperFillManager.fillReport(report, null,new JRBeanCollectionDataSource(lista));
            JasperViewer jasperViewer = new JasperViewer(print, false );
            jasperViewer.setVisible(true);                        
        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }        
    }
    
}

Essa classe possui dois métodos o execute() e o geraRelatório(). O método execute tem a função de instanciar um objeto da classe ClienteFactory, obter a lista de clientes e enviá-la ao método geraRelatório. Como o método execute tem uma funcionalidade simples, não abordaremos seus detalhes neste post.

geraRelatório()

private void geraRelatorio(List<cliente> lista) {
        try{            
URL arquivo = getClass().getResource("/br/com/deviscoming/relatorio/relDevComing.jasper");                                  
            JasperReport report = (JasperReport) JRLoader.loadObject(arquivo);
JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
            JasperViewer jasperViewer = new JasperViewer(print, false );
            jasperViewer.setVisible(true);                        
        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }        
    }

A classe instanciamos um objeto da classe URL e definimos a ele onde está localizado nosso relatório. Este objeto será utilizado como parâmetro para o método da classe JRLoader. O método loadObject vai receber o objeto arquivo e ficará responsável por carregar o relatório e o retorno irá para o objeto report da classe JasperReport.

No método fillReport receberá o objeto report, parâmetros (se houver) e um objeto de JRBeanCollectionDataSource e enviamos a lista de clientes por parâmetro.

Após estes pontos bem definidos, basta somente apresentá-los ao usuário com a classe JasperViewer.

No próximo post vamos passar para o ponto onde faremos o relatório e o configuraremos corretamente para receber os dados JavaBean.

Até mais!

;)

quarta-feira, 13 de abril de 2016

Relatório iReports com JRBeanCollectionDataSource #1




Fala galera!

Bom esses dias precisei elaborar um relatório, mas como não havia necessidade de conexão com o banco de dados, então resolvi pesquisar sobre a classe JRBeanCollectionDataSource.

Como é informado no site da JasperReport, é comum acessar dados de aplicativos através de camadas de persistência de objetos como EJB, Hibernate, etc. Esses aplicações podem precisar gerar relatórios utilizando dados que já possuem disponível em matrizes ou em coleções de objetos JavaBean na memória.

Aqui trataremos de um tutorial com uma aplicação básica e a configuração do iReports.

Obs.: informo que estou utilizando o NetBeans IDE 7.3, iReports 5.5.1.


Criando novo projeto

Vamos criar um novo projeto no NetBeans, portanto vamos seguir o mesmo passo a passo de sempre:

File -> New project.



Aqui vamos utilizar uma aplicação Java (Java Application) e definiremos o nome do projeto como ReportDevIsComing.



Veja a seguir a estrutura final do projeto:


A primeira classe que será implementada é a classe Cliente. Esta classe possuirá os atributos referente aos clientes e esses atributos que serão utilizados/mostrados no relatório.

Classe Cliente

 // To change this template, choose Tools | Templates
 // and open the template in the editor.
package br.com.deviscoming;

/**
 *
 * @author renan.ramos
 */
public class Cliente {
    
     private int id;
    
    private String nome;
    
    private String endereco;
    
    private String estado;
    
    private String cidade;
        
   //metodos getters e setters 
   
}

Agora, precisamos implementar a classe que será responsável por fornecer os dados para o relatório, essa classe será definida como ClienteFactory. Para que o relatório funcione precisamos de um método estático (static) que irá "pegar" aos dados e retorná-los como um objeto da interface Collection.

Classe ClienteFactory

/**
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deviscoming;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 *
 * @author renan.ramos
 */
public class ClienteFactory {
   public static Collection getCliente(){      
      return setCliente();
  }      
    
   private static Collection setCliente() {
       List clientes = new ArrayList();
       
       Cliente c1 = new Cliente();
       c1.setId(1);
       c1.setNome("Fulano da Silva");
       c1.setEndereco("Rua das Acácias");
       c1.setCidade("São Paulo");
       c1.setEstado("São Paulo");
       
       clientes.add(c1);
       
       Cliente c2 = new Cliente();
       c2.setId(2);
       c2.setNome("Beltrano da Silva");
       c2.setEndereco("Avenida Ipanema");
       c2.setCidade("Rio de Janeiro");
       c2.setEstado("Rio de Janeiro");
       
       clientes.add(c2);       
       
       return clientes;
    }   
}

Na segunda parte do post iremos tratar a configuração do relatório para que possamos exibí-lo
para o usuário.

Até mais!