Problemas com ireport

Oi pessoal,

Eu ja tentei de varias formas passar parametro para o ireport e nao consigo, ja procurei na internet, fiz igual varios exemplos e mesmo assim nao consegui.

private class ActionImprimirEmpresaEscolhida implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {

				conexao(); 
		    	String arq = DataBaseOperations.arquivos()+"EmpresaEscolhida.jrxml";   
		   	
				parametro = Integer.parseInt(empresaTextNumeroProc.getText());
					
				HashMap map = new HashMap();
				map.put("query", parametro);    
				
		    	InputStream input = null;
				try {
					input = new FileInputStream(new File(arq));
				} catch (FileNotFoundException e3) {
					// TODO Auto-generated catch block
					e3.printStackTrace();
				}   
		    	JasperDesign design = null;
				try {
					design = JRXmlLoader.load(input);
				} catch (JRException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}   
		    	JasperReport report = null;
				try {
					report = JasperCompileManager.compileReport(design);
				} catch (JRException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} 
		    	JasperPrint impressao = null;
				try {
					impressao = JasperFillManager.fillReport(report, map, con);
				} catch (JRException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}   
		    	JasperViewer viewer = new JasperViewer(impressao,false);   
		    	viewer.setVisible(true);  

							
			
		}
	}

se eu tirar as opcoes de paramtro impressao = JasperFillManager.fillReport(report, NULL, con); funciona perfeitamente mas eu preciso do parametro para poder escolher a empresa que sairá na impressao pelo ID.

na parte de consulta de relatorio do ireport falaram pra eu usar a sql SELECT * FROM empresa WHERE id=’$P{query}’, mas creio que as aspas sáo para verificar um modo de palavra.

Alguem pode me ajudar?

Olá…
Bem, vamos por partes.
Quando você decide passar parâmetros para o Jasper, e necessário que você também crie uma referência a esse parâmetro no iReport (se você usa o iReport).
Exemplo:
Vamos passar um parâmetro como o ID para uma consulta no iReport

Map<String, Object> parametros = new HashMap<String, Object>()
parametros.put("id", valorDoId);

Feito isso, vamos no iReport e então criamos uma referência ao parametro que será passado:
No iReport, vá em Visualizar, Parâmetros do Relatório, então clique em Novo, no Nome do Parâmetro, informe o nome do parâmetro que você quer usar, usando o mesmo nome que passou para o Mapa (no nosso caso id).

Então, na query dentro do seu relatório você pode usar:

SELECT * FROM empresa WHERE id=$P{id}

Entendeu?

[]'s
JL

Entedi sim,

Mero Aprendiz? não parece rsss,

muitissimo obrigado, funcionou certinho, so deu um erro mas logo saquei de cara que faltava mudar algo relacionado a variavel pois a minha variavel é uma int e quando cria o padrao é String, logo depois de “visualizar”, “parametros de relatorio”, “novo” ao criar a variavel precisei mudar para int.

Aproveitando a ocasiao, vc saberia me dizer como passar por parametro uma imagem?

Abs

[quote=Kaiser]Entedi sim,

Mero Aprendiz? não parece rsss,

muitissimo obrigado, funcionou certinho, so deu um erro mas logo saquei de cara que faltava mudar algo relacionado a variavel pois a minha variavel é uma int e quando cria o padrao é String, logo depois de “visualizar”, “parametros de relatorio”, “novo” ao criar a variavel precisei mudar para int.

Aproveitando a ocasiao, vc saberia me dizer como passar por parametro uma imagem?

Abs[/quote]

Bem, para passar uma imagem como parametro, você deve usar da mesma forma, passando para o mapa como chave e valor, e no iReport, criar uma referência ao parametro (como fizemos com o id, do mesmo tipo);
Para saber os tipo de objetos que você pode passar como imagem basta ir na aba Imagem e ver na combo Classe de Expressão de Imagem.
Lembrando apenas que os do tipo String deve ser o caminho completo da imagem (Ex.: c:\diretório\imagem.img).

[]'s
JL

Tem como passar o valor de uma String pelo ireport.

Eu quero criar uma logica no java onde vai montar a query e passar a query pronta pro ireport.

Ex
No java eu faco assim

String query = “SELECT * FROM empresaFuncionario WHERE empresa=’”+customizadoEmpresaFuncionarioEmpresa+"’";

if (!customizadoEmpresaFuncionarioNome.equals("")){   
        query += "AND nome=\'"+customizadoEmpresaFuncionarioNome+"\'"; 
				
   	if (!customizadoEmpresaFuncionarioAno.equals("")){     
        query +=  "AND ano =\'"+customizadoEmpresaFuncionarioAno+"\'";

   	if (!customizadoEmpresaFuncionarioMes.equals("")){     
	    query +=  "AND ano =\'"+customizadoEmpresaFuncionarioMes+"\'";

Eu preciso fazer assim, porque se o cara nao preencher todos os campos, a tabela nao é gerada pelo ireport, se eu conseguisse passar so a variavel query formando a “Query na consulta de relatorio do irepot” ficaria certinho.

Alguem pode me ajudar?

resolvido

basta passar a query por parametro no relatorio do ireport $P!{query}

Mero_Aprendiz, dá uma ajudinha!!!

estou com problemas no meu subrelatorio. No iReports, ele aparece blz, mas no java, o relatorio principal aparece, mas o subrelatorio fica branco…
Com certeza é barberagem minha, mas ainda não encontrei o erro… provavelmente é de parametrização ou de query (apesar de funcionar direitinho no pgadmin).

Segue abaixo o codigo do método e do jasper do relatorio principal e do sub. Se puder ajudar, agradeço.

Vlws.

método no bean:

[code] public String imprimirRelatorio(ActionEvent event) throws Exception {

    // pegar objeto com actionEvent
    UIComponent link = event.getComponent();
    UIParameter parametro = (UIParameter) link.findComponent("printCod");
    Long id = (Long) parametro.getValue();
    saida = null;
    System.out.println("metodo de impressao");
    String jasper = getDiretorioReal("/jasper");
    Connection conexao = null;

    FacesContext facesContext = FacesContext.getCurrentInstance();
    HttpServletResponse response = (HttpServletResponse) facesContext
            .getExternalContext().getResponse();
    ServletOutputStream servletOutputStream = response.getOutputStream();

    try {
        Connection con = new Conexao().getConexao();
        Statement stm = con.createStatement();
        String query = "SELECT pf.cod_funcionario AS cod_funcionario, es.descricao AS escolaridade_descricao, og.nome AS og_nome, cg.descricao AS cargo_descricao, chs.descricao AS cargahoraria_descricao, uf.uf AS uf, mn.municipios AS municipio, * FROM pforgaogestor pfog INNER JOIN orgaogestor og ON og.cod_orgaogestor = pfog.cod_orgaogestor INNER JOIN cargo cg ON cg.cod_cargo = pfog.cod_cargo INNER JOIN cargahorariasemanal chs ON chs.cod_chs = pfog.cod_chs INNER JOIN funcionario pf ON pf.cod_funcionario = pfog.cod_funcionario INNER JOIN escolaridade es ON es.cod_escolaridade = pf.escolaridade_cod_escolaridade INNER JOIN estados uf ON uf.cod_estado = pf.estados_cod_estados INNER JOIN municipiosrr mn ON mn.cod_municipiosrr = pf.municipiosrr_cod_municipiosrr WHERE pf.cod_funcionario="
                + id;
        ResultSet rs = stm.executeQuery(query);
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

        // parametros
        Map parametros = new HashMap();
        parametros.put("QUERY", con);
   
        // PARAMETRO ADICIONADO PARA SUBREPORT
        parametros.put("pathPessoafisicaDCsubOG", jasper
                + "/pessoafisicaDCsubOG.jasper");

        // Mando o jasper gerar o relatório
        JasperPrint rel = JasperFillManager.fillReport(jasper
                + "/pessoafisicaDC.jasper", parametros, jrRS);

        // exibindo o pdf para impressao
        // JasperViewer.viewReport(rel, false);

        // exportando o pdf
        System.out.println("pdf gerado");
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        JasperExportManager.exportReportToPdfStream(rel, output);
        response.setContentType("application/pdf");
        response.addHeader("Content-Disposition",
                "attachment;filename=relatorio" + id + ".pdf");
        response.setContentLength(output.size());

        servletOutputStream.write(output.toByteArray(), 0, output.size());
        servletOutputStream.flush();
        servletOutputStream.close();
        facesContext.responseComplete();

    } catch (JRException e) {
        e.printStackTrace();

    } finally {
        try {
            if (conexao != null)
                conexao.close();
        } catch (Exception e) {

        }
    }

    return "exibeRelatorio";

}[/code]

xml do subrelatorio:

[code]<?xml version="1.0" encoding="UTF-8"?>













<![CDATA[SELECT

pf.cod_funcionario AS cod_funcionario,

es.descricao AS escolaridade_descricao,
og.nome AS og_nome,
cg.descricao AS cargo_descricao,
chs.descricao AS cargahoraria_descricao,
uf.uf AS uf,
mn.municipios AS municipio,

FROM pforgaogestor pfog
INNER JOIN orgaogestor og ON og.cod_orgaogestor = pfog.cod_orgaogestor
INNER JOIN cargo cg ON cg.cod_cargo = pfog.cod_cargo
INNER JOIN cargahorariasemanal chs ON chs.cod_chs = pfog.cod_chs
INNER JOIN funcionario pf ON pf.cod_funcionario = pfog.cod_funcionario
INNER JOIN escolaridade es ON es.cod_escolaridade = pf.escolaridade_cod_escolaridade
INNER JOIN estados uf ON uf.cod_estado = pf.estados_cod_estados
INNER JOIN municipiosrr mn ON mn.cod_municipiosrr = pf.municipiosrr_cod_municipiosrr

WHERE pf.cod_funcionario=$P{codPF}
]]>





































































































































































































































































































































[/code]

xml do relatorio principal:

[code]<?xml version="1.0" encoding="UTF-8"?>





















<![CDATA[SELECT

pf.cod_funcionario AS cod_funcionario,

es.descricao AS escolaridade_descricao,
og.nome AS og_nome,
cg.descricao AS cargo_descricao,
chs.descricao AS cargahoraria_descricao,
uf.uf AS uf,
mn.municipios AS municipio,

FROM pforgaogestor pfog
INNER JOIN orgaogestor og ON og.cod_orgaogestor = pfog.cod_orgaogestor
INNER JOIN cargo cg ON cg.cod_cargo = pfog.cod_cargo
INNER JOIN cargahorariasemanal chs ON chs.cod_chs = pfog.cod_chs
INNER JOIN funcionario pf ON pf.cod_funcionario = pfog.cod_funcionario
INNER JOIN escolaridade es ON es.cod_escolaridade = pf.escolaridade_cod_escolaridade
INNER JOIN estados uf ON uf.cod_estado = pf.estados_cod_estados
INNER JOIN municipiosrr mn ON mn.cod_municipiosrr = pf.municipiosrr_cod_municipiosrr

WHERE pf.cod_funcionario=$P{codPF}
]]>











































































































































































































































































































































































































































































































































































































[/code]

Aguardo contato. Vlws.

UP!