Ordenação Pela Tela da Aplicação

19 respostas
jasper
H

Olá, sou novo aqui, desculpem se estou no lugar errado.

Tenho uma dúvida que não consegui encontrar solução ainda.

Estou com uma demanda de um cliente solicitando que ao gerar o iReport, este receba a ordenação da tela da aplicação, ou seja, se o usuário ordenar por data o iReport deve ordenar por data, se o usuário ordenar por nome o iReport deve ordenar por nome e assim sucessivamente.

A minha dúvida é, como fazer isso no jasper? As únicas opções que eu achei não são dessa forma, são com input do usuário ao gerar o report como parâmetro.

19 Respostas

rodriguesabner

Ta usando banco de dados?

H

Sim, estou utilizando banco PostgreSql.

rodriguesabner

vc pode fazer na hora de chamar o relatorio:

id

SELECT * FROM algumaCoisa ORDER BY id ASC

nome

SELECT * FROM algumaCoisa ORDER BY nome ASC

data

SELECT * FROM algumaCoisa ORDER BY algumaData ASC
H

Porém eu quero que respeite a ordenação da tela da aplicação, não quero fazer fixo no SQL a ordenação, conforme eu falei acima, se o usuário ordenar na tela por data, o relatório tem que ordenar por data, se ordenar por nome, o relatório tem que ordenar por nome e assim sucessivamente.

rodriguesabner

Então, a cada botão você vai ter que chamar uma query diferente

H

Por exemplo:

select * from tabela order by recebe_ordenacao

onde recebe_ordenacao é um parâmetro dinâmico que deve ser recebido da aplicação.

rodriguesabner

é o que eu to falando kkkkkkkk, vc nem precisa criar varios metodos, cria uma vez só e faz isso:

private void chamarRelatorio(String recebe_ordenacao){
    ..........
    select * from tabela order by recebe_ordenacao
}
H

Desculpe, sou novo com tudo isso, vou tentar fazer.

rodriguesabner

Mostra o código que vc chama o relatório

rcarvalhoalencar

Criar um report específico para cada, seria viável?
Tipo um report para nome, chamar esse report passando o nome.

Eu tinha feito isso um a tempo.

H

Sem qualquer possibilidade de fazer isso, infelizmente

rodriguesabner

Nossa, é muito trabalho, só passar o SQL já está de ótimo tamanho

H

Hoje o relatório é somente um sql que recebe IDs. Você quer o Source?

rodriguesabner

De onde vc chama esse relatorio?

H

O relatório fica dentro da aplicação, ao clicar em gerar relatório você seleciona o relatório, esse relatório recebe os ids que estão na tela para gerar o relatório, basicamente eu quero fazer a mesma coisa, só que para o order by

where
$X{IN, t.id, ids}

esse é o where do relatório, quero fazer algo parecido com o order by.

rodriguesabner

ok, mostra o código da aplicação, é o codigo q vc usa pra gerar o relatorio

H

Infelizmente eu não tenho acesso a aplicação, eu somente crio os relatórios dentro da empresa hehe…

rodriguesabner

Aí complica né… pensei em um if, mas não resolveria muito não…

Dei uma pesquisada bem rapida aqui, achei isso:


Jasper supports $P!{PARAM} to hold the SQL inside a parameter and pass it to the report datasource.

Check this: http://community.jaspersoft.com/questions/529203/pparam-vs-pparam

If I’m understanding your question correctly, jasper does not support dynamic SQL queries. (it cannot detect the field changes at runtime and modify the jrxml by itself)

For example : you can pass “select column1, column2 from table where condition = 1” as a parameter, but the same fields should be evaluated inside the jrxml beforehand.

lets say if you pass “select column3, column4 from table where condition = 1” as a parameter into the above mentioned report, it would fail because the evaluated fields column1 and column2 could not be found at runtime.


fonte:
https://community.jaspersoft.com/questions/1069406/passing-sql-query-parameter.

H

vou contatar o meu dev e pedir mais infos pra eles e retorno aqui, obrigado por hora!

Criado 1 de abril de 2020
Ultima resposta 1 de abr. de 2020
Respostas 19
Participantes 3