Parametros para o Jasper

10 respostas
kaio_sergio

como faço para enviar parametros com virgula para o jasper via url, onde esses parametros vão ser usados para realizar uma consulta na instrução SQL q esta dentro do jasper esperando esse parametro?
Tentei mandar direto, porém o jasper nao reconhece isso, pelo que eu debuguei, reconheceu como se fosse outro parametro e ai nao gera o relatório pois nao estou esperando esse parametro…

Alguem sabe como posso receber esses parametros? Ou se existe algum modo de enviar uma string na url com instrução SQL para completar a consulta q quero fazer no jasper

10 Respostas

jonataswingeter

Olá.

No seu programa que executa o JasperReports, você deve ter algum código como:

jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
Este params, é um Map, e você deve:

1) Pegar o objeto via GET de seu JSP pelo controlador, ou servlet;

2) Inserir no Map:
[code]Map params = new HashMap();
params.put("param1", param1);
3) Criar no seu relatório (XML) um campo chamado "param1", e demais, conforme sua necessidade:
<parameter name="param1" isForPrompting="false" class="java.lang.String"/>

isForPrompting é para saber se ele é requerido por padrão e a class é o tipo do seu argumento.

Agora no seu código SQL dentro do relatório XML você deve inserir a claúsula $P{param1} para avaliar:

SELECT * FROM tabela WHERE id_tabela <= $P{param1} ORDER BY descricao

Att.

kaio_sergio

O meu relatório esta assim, porém a string q quero mandar são números separados por virgula 1,2,3.

Acho q esta acontecendo é o seguinte, o separador de parametros para o jasper é a virgula, entao acho q qndo o jasper lê os parametros enviados pelo código java ele reconhece o segundo numero separado por virgula com outro parametro. Ai da erro na consulta…

jonataswingeter

OK.

1) Troque o tipo do parametro para Object e veja se o comportamento continua.

2) Se continuar, implemente um Objeto específico que retorna a tal String com vírgulas.

Por exemplo:

package com.test.bean;

public class Consulta {
   ....
   public String getConsulta() {
      return "1, 2, 3";
   }
}

e no seu relatório:

<parameter name="param1" isForPrompting="false" class="com.test.bean.Consulta"/>
<queryString>
SELECT * FROM tabela WHERE id_tabela <= $P{param1}.getConsulta() ORDER BY descricao
</queryString>

Agora, é só você inserir uma instância "Consulta" no params, do método fillReport().

Att.

kaio_sergio

Me explica melhor como fazer p importar uma classe p dentro do jasper? se vc tiver um código d exemplo e se puder me mandar seria melhor…
[email removido]

Valeu pela ajuda!!!

jonataswingeter

Olá Kaio.

Não precisa.

Basta você ter o pacote definido e sua classe, e definir seu uso no relatório xml.

O jasper consegue achar a instância da sua classe sem ajuda. :slight_smile:

kaio_sergio

Nao funcionou nenhum dos dois modos! o jasper na consulta nao reconhece param1.getConsulta()!

Estou com o src do jasper1.1.1 para tentar mudar o modo de separação dos parametros, acho q se eu mudar para outro separador pode ser q entenda o parametro.

Tu sabe outro meio?

andreengesoft

Tem varios tutoriais no forum baixa eles que vai te ajudar muito, como me ajudou a passar parametros blz.

segue em anexo um tutorial interessante.

valeu

jonataswingeter

Opa.

Primeiramente, acharia interessante atualizar a versão do Jasper. Sua versão está muito antiga. Já está em 3.1.

http://sourceforge.net/project/showfiles.php?group_id=36382&package_id=28579&release_id=488026

Att,

kaio_sergio

Eu consegui valeu pela ajuda!

Para receber multiplos valores eu tenho q colocar SP!{param1} e assim ele recebe por url mesmo…passou desapercebido

jonataswingeter

Ótimo Kaio.

Coloque o tópico como [RESOLVIDO] para ajudar a comunidade.

Att.

Criado 2 de março de 2007
Ultima resposta 6 de mar. de 2007
Respostas 10
Participantes 3