Duvidas IREPORT e subRelatorio

4 respostas
P

Olá pessoal estou com algumas duvidas sobre o ireport e gostaria de alguma ajuda se possivel

seguinte!

… estou realizando meu primeiro relatorio no ireport aqui no meu trabalho,
entrei como estagiario entao nao sei muito bem como e o processo aqui e to apanhando rsrs

pois entao lah vai as duvidas …

“fiz” o layout do que sera o relatorio, ta quase pronto so que
assim como fiz diretamento no ireport 4.0.0, coloquei lah empty data, para rodar certo,
ai no lugar onde vao os valores que deveram vir da aplicacao java colokei tudo FILDS,!
e como esse relatorio teria 2 pagina criei um subrelatorio como sendo uma continuação da pagina…

ate ai tudo ok !

agora minha duvida

vi que em outros relatorios da empresa eles costumam passar por HASHMAP
esse valores… com isso devo MUDAR os meus FILDS para PARAMETROS ???

segunda duvida no subrelatorios como ele se comporta ? como vou popular os FILDS que coloquei lah???

FILDS so aceitam retornos de ResultSet ??? ou podem ser pela HASHMAP ???

to perdidao, grato pela ajuda !!!

4 Respostas

ederfreitas

Exato, fields são utilizados quanto trata-se de campos oriundos de projeções do banco de dados, como por exemplo uma consulta estática que você fizer no Ireport será listada na lista de Fields do seu relatório, porém, não é obrigatório trabalhar apenas com SQL estáticas, uma vez que você adicionar os fields manualmente em seu relatório você poderé passar para o Ireport um List de pojos, cada field do seu relatório deverá existir no seu pojo ambos encapulados por um método getter, para geração deste relatório você deverá utilizar a classe JRBeanCollectionDataSource passando em seu construtor a List tipada do seu pojo, segue-se exemplo obtido no site i-proving.ca:

public void printPerson(Person person) throws JRException {

    List<Person> persons = new ArrayList<Person>();
    persons.add(person);

    JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(persons);            

    JasperReport jasperReport = JasperCompileManager.compileReport("c:/reports/PersonReport.jrxml");
    JasperPrint  jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), datasource);
    // Exporta o relatório em PDF
    JasperExportManager.exportReportToPdfFile(jasperPrint, "c:/reports/person.pdf");
}

Agora voltando a sua dúvida, sim, você também pode trabalhar com Hashmap, só que os campos do seu relatório deverão ser alterados para params e não fields, lembrando que a chave do objeto também deverá existir em seu relatório, ambos com nomes idênticos.

Um exemplo trabalhando com Map:
/* Cria um JRResultSetDataSource com o resultado da consulta */  
     JRResultSetDataSource jrrs = new JRResultSetDataSource(result);  
     Map<String, String>parametros = new HashMap<String, String>();  
     parametros.put("um_parametro","um_valor");
     JasperPrint jp = JasperFillManager.fillReport("c:/z3/web/reports/relatorioterceiro.jasper", parametros, jrrs);

Abçs.

P
ederfreitas:
Exato, fields são utilizados quanto trata-se de campos oriundos de projeções do banco de dados, como por exemplo uma consulta estática que você fizer no Ireport aparerá a projeção utilizada na SQL na lista de Fields do seu relatório, porém, não é obrigatório trabalhar apenas com SQL estáticas, uma vez que você adicionar os fields manualmente em seu relatório você poderé passar para o Ireport um List de pojos, cada field do seu relatório deverá existir no seu pojo ambos encapulados por um método getter, para geração deste relatório você deverá utilizar a classe JRBeanCollectionDataSource passando em seu construtor a List tipada do seu pojo, segue-se exemplo obtido no site i-proving.ca:
public void printPerson(Person person) throws JRException {

    List<Person> persons = new ArrayList<Person>();
    persons.add(person);

    JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(persons);            

    JasperReport jasperReport = JasperCompileManager.compileReport("c:/reports/PersonReport.jrxml");
    JasperPrint  jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), datasource);
    // Exporta o relatório em PDF
    JasperExportManager.exportReportToPdfFile(jasperPrint, "c:/reports/person.pdf");
}

Agora voltando a sua dúvida, sim, você também pode trabalhar com Hashmap, só que os campos do seu relatório deverão ser alterados para params e não fields, lembrando que a chave do objeto também deverá existir em seu relatório, ambos com nomes idênticos.

Um exemplo trabalhando com Map:
/* Cria um JRResultSetDataSource com o resultado da consulta */  
     JRResultSetDataSource jrrs = new JRResultSetDataSource(result);  
     Map<String, String>parametros = new HashMap<String, String>();  
     parametros.put("um_parametro","um_valor");
     JasperPrint jp = JasperFillManager.fillReport("c:/z3/web/reports/relatorioterceiro.jasper", parametros, jrrs);

Abçs.

Nossa ja deu uma esclarecida boah velho muito grato mesmooooooooooooooo

agora mais uma coisa ..

eu realmente coloquei os filds na mão
esse fidls são valores em R$
tao no caso se eu queira utilizar os filds e criar essa lista comforme vc explicou eu deveria cria um objeto com
todos esses "fildes" devidamente encapsulados com seus getters etc ??? (muitossssssss fields + - 210) e então populalos
???

e na outra opcao se eu muda-se esses filds para paramatros é so eu setar na hash cada parametro com o nome devidamente igual ao
ao colocado no irerpot e mander essa hash que ele vai popular no irepor isso ? ext hash.put("nome", "Carlos").. ??

desde ja muito gratoo

abr

ederfreitas

Sim vai ter que setar todos dados do seu relatório; passar por Map pode ser mais trabalhoso, particularmente acho mais elegante trabalhar com a form citada acima.

T

huaiauhiauhaiuhaiuah
era mais fácil ir perguntar na mesa dele
aiahaiuhaiuahiuhiuh
os dois trabalham na mesma empresa

Criado 21 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 4
Participantes 3