Galera,
estou tentando fazer um sql dinamico no ireport e nao estou conseguindo. Fiz o seguinte:
fiz o layout no ireport
coloquei a query desejada
adicionei nessa query um parametro
fiz minha classe java para gerar o relatorio
coloquei a mesma query q estava la no ireport na minha classe
copiando ate mesmo o parametro
mas tem o seguinte, qndo vou gerar o relatorio ele pega o oarametro q coloquei la no ireport, nao deixando eu colocar outro.
Gostaria de saber se alguem poderia me dizer como faco para gerar essa query dinamica.
A solução é simples, basta não fazer a query diretamente no relatório . Execute sua query na aplicação da maneira que quiser, pegue o ResultSet e tranforme ele em uma lista. Então utilize o objeto JRBeanCollectionDataSourcee passe o objeto prontinho prontinho para o relatório:
//Método onde adquiro a lista
public void rliLista() {
/* Obtem a coleção de objetos
* para compor o detail do relatório
* a partir do Hibernate
*/
List resultado = f.selecionaTudo("ListaInfratores");
JRBeanCollectionDataSource jrc = new JRBeanCollectionDataSource(resultado);
/* chamando o metodo para construir
* o relatório apartir de um collection
*/
nova="rliLista";
constroiRelatorio(jrc);
}
}
[code]//metodo que constroi o relatorio passando o objeto anterior
public void constroiRelatorio(JRBeanCollectionDataSource jrc) {
try {
//compila relátorio
JasperReport relatorio = JasperCompileManager.compileReport(layout);
// prepara o relatorio para impressao
JasperPrint impressao = JasperFillManager.fillReport(relatorio,
parametros, jrc);
//Exibi o resultado da impressão em padrão swing
if(!nova.equals(atual) && viewer!=null){
viewer.dispose();
viewer=null;
}
if(viewer==null){
atual=nova;
viewer = new JasperViewer(impressao, false);
viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);
viewer.setVisible(true);
} else {
viewer.setVisible(true);
}
viewer.addWindowListener(new WindowAdapter(){
public void windowClosed(WindowEvent arg0) {
viewer=null;
instance=null;
}
});
} catch (JRException e) {
e.printStackTrace();
}
}[/code]
Esse último metodo você pode dar uma boa enxugada nele afinal fiz algumas coisas a mais neles (reaproveitei de um projeto antigo).
Vai la o IReport e cria sua Query normalmente, sem usar parametros nem nada(coloca no where uns parametros fixos so pra ele trazer os campos pra vc trabalhar)
depois na hora de chamar o jasper vc faz o select que quiser e joga em um resultSet e depois passa esse result pro jasper assim:
ResultSet seuResult = suaConsulta;
JasperFillManager.fill(relatorio, map, new JRResultSetDataSource(seuResult));
verifica se os nome dos componentes sao estes mesmos, to fazendo de cabeça!!!
[edited]
observando que os campos da query que vc fez la no IReport devem estar presentes nessa sua query dinamica!!!
Galera,
mil perdoes … mas nao estou conseguindo fazer o relatorio.
sera que alguem pode me mandar um codigo exemplo completo para que eu possa dar uma olhada, pq eu nao estou entendendo algumas coisas, e talvez isso resolva se alguem mandar um exemplo completo.
Galera,
meu maior problema é nao conseguir popular meu HashMap para que ele possa jogar no relatorio, nao eh assim q funciona?
primeiro popula o HashMap e depois joga para o relatorio?
pq se for assim o negocio … eh isso q falta.