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!

;)
Renan Rodrigues Ramos Desenvolvedor

Sou desenvolvedor, amo desenvolvimento de software, músico e apaixonado por filmes e seriados.