2
respostas

Passar uma lista por parâmetro de entrada

Ótima noite!

Estou querendo passar uma lista de valores pelo parâmetro de entrada do Jaspersoft iReport Designer. Por exemplo:

  • Código do Produto: 1,2,6-10

Montagem da query para o banco:

((TABELA.CAMPO = 1 OR TABELA.CAMPO = 2) AND (TABELA.CAMPO >= 6 AND TABELA.CAMPO <= 10)

Eu consegui através do iReport montar o seguinte artificio técnico:

Dois parâmetros de entrada: O primeiro é do tipo string (P_CODIGO) e é onde o usuário preenche os dados, o segundo é do tipo list (P_LISTA) e o usuário não visualiza.

O segundo parâmento recebe a seguinte expressão como valor padrão:

$P{P_CODIGO} != null && $P{P_CODIGO}.trim().length() > 0 ? Arrays.asList($P{P_CODIGO}.trim().replaceAll("([^0-9]+)+", ",").split(",")) : null

No banco de dados faço o seguinte na minha query:

SELECT TAB.CODIGO,
        TAB.DESCRICAO
FROM TABELA TAB
WHERE ($X{IN,TAB.CODIGO ,P_LISTA})

Até então consigo montar abrangência somente de valores separados por vírgula, exemplo da entrada do usuário:

  • Código do Produto: 1,2,3,4
  • Query retorna 4 resultados.

Contudo, não consigo buscar na query valores separados por traço, exemplo da entrada do usuário:

  • Código do Produto: 1-4
  • Query retorna 2 resultados.

Alguém tem uma solução, aproveito para informar que não tem como trabalhar com IDE, por exemplo pegar o arquivo e colocar dentro de uma IDE manipular via código, somente consigo trabalhar pelas ferramentas e técnicas do JASPER.

2 respostas

Olá Gabriel!

Não manjo de Jasper mas estou disponível para tentar te ajudar.

Já tentou alterar a Query trocando o AND para OR?

[...] TABELA.CAMPO = 2) -->AND<-- (TABELA.CAMPO >= 6 [...]

Tenta mudar para:

[...] TABELA.CAMPO = 2) OR (TABELA.CAMPO >= 6 [...]

Pensando em código Java, reparei que usou o método split. Não seria possível utilizar esse método pra fazer a junção dessas páginas que usam o hífen?

Por exemplo, daria para separar os números e utilizá-los num for onde o inicio é o número anterior do hífen e o final seria quando o contador chegar no número posterior ao hífen.

Não sei se fazem sentido as coisas que escrevi, peço desculpas mas espero que te ajudem de certa forma!

Olá Gabriel!

Conseguiu passar a lista?