Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dificuldade para inserir paramentro no JRBeanCollectionDataSource Java

Pessoal, tenho uma coleção de dados que é importado de um arquivo TXT, funciona perfeito, consigo emitir um relatorio pelo Jasper Report 6 de toda a lista, minha dificuldade são duas, gerar o relaltorio só de um funcionario ou um grupo de funcionario, ja tentei de tudo mais nao conseguir, entao vir aqui como ultima opção, kkkkkk

O botao que chama o relatório

private void botRelatorioActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
    Relatorio relatorio = new Relatorio();
    try {           
        relatorio.gerarRelatorio(pc.pessoaId(1));
    } catch (JRException ex) {
        Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
    }

}  

A classe relatorio

public class Relatorio {

private PessoaControler pc = new PessoaControler();

public void gerarRelatorio(List<Pessoa> lista) throws JRException {
    InputStream fonte = Relatorio.class.getResourceAsStream("/relatorio/funcionario.jrxml");

    JasperReport report = JasperCompileManager.compileReport(fonte);
    Map<String, Object> parameter = new HashMap<>();
    parameter.put("codigo", pc.pessoaId(1));
    
    JasperPrint print = JasperFillManager.fillReport(report, parameter, new JRBeanCollectionDataSource(lista));
    JasperViewer.viewReport(print, false);

}

}

eu nao achei nenhum exemplo que me ajudasse nesse sentido, porque só encontrei os parametros vindo de um select, no meu caso é de uma coleção, e o usuario escolhe se quer trazer a lista toda, um ou um pequeno grupo de funcionarios.

3 respostas

Inserindo o metodo listarTodos

private void botRelatorioActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
    Relatorio relatorio = new Relatorio();
    try {           
        relatorio.gerarRelatorio(pc.listarTodos());
    } catch (JRException ex) {
        Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
    }

}  
solução!

Oi Anderson, tudo bem?

A primeira coisa que você precisa fazer é modificar seu método gerarRelatorio para aceitar parâmetros e, em seguida, ajustar a chamada do método no botão para passar os parâmetros desejados. Aqui está como você pode fazer isso:

  1. Modifique o método gerarRelatorio na classe Relatorio para aceitar um parâmetro que represente a lista de funcionários a serem incluídos no relatório. Você também pode adicionar um parâmetro adicional para indicar o nome do arquivo de relatório JRXML que você deseja usar.
public void gerarRelatorio(List<Pessoa> lista, String nomeRelatorio) throws JRException {
    InputStream fonte = Relatorio.class.getResourceAsStream("/relatorio/" + nomeRelatorio + ".jrxml");

    JasperReport report = JasperCompileManager.compileReport(fonte);
    Map<String, Object> parameters = new HashMap<>();
    parameters.put("codigo", pc.pessoaId(1)); // Você pode passar outros parâmetros conforme necessário

    JasperPrint print = JasperFillManager.fillReport(report, parameters, new JRBeanCollectionDataSource(lista));
    JasperViewer.viewReport(print, false);
}
  1. No botão botRelatorio, você pode chamar o método gerarRelatorio com a lista de funcionários desejada e o nome do arquivo JRXML que corresponde ao relatório que você deseja gerar. Por exemplo, se você quiser gerar um relatório para todos os funcionários, você pode chamar o método da seguinte maneira:
private void botRelatorioActionPerformed(java.awt.event.ActionEvent evt) {                                             
    Relatorio relatorio = new Relatorio();
    try {           
        relatorio.gerarRelatorio(pc.listarTodos(), "funcionario");
    } catch (JRException ex) {
        Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
    }
}
  1. Se você quiser gerar um relatório apenas para um funcionário ou um grupo de funcionários, você pode ajustar a lista de funcionários que você passa como parâmetro. Certifique-se de que a lista passada para o método gerarRelatorio contenha apenas os funcionários desejados.

Dessa forma, você deve ser capaz de gerar relatórios para diferentes grupos de funcionários com base nos parâmetros que você fornece ao método gerarRelatorio. Certifique-se de que os nomes dos arquivos JRXML correspondam aos diferentes relatórios que você deseja gerar.

Um abraço e bons estudos.

Lorena bom dia,

Muito massa, vou textar e ja ja te dou uma resposta.

Atenciosamente,

Anderson Ferreira