Ocultar/Mostrar linhas no jasperreports por definição de um parâmetro de entrada
12 respostas
jasper
guilhermebhte
Tenho o parametro $P{ordenadorDespesa}, que pode vir nulo ou vazio ou preenchido. Preciso mostrar no relatório quando este vier preenchido e quando não for esconder a linha
Tentei das duas formas, mas nenhuma deu certo
1-
<staticText><reportElementx="3"y="83"width="137"height="20"uuid="ffb97e30-9c11-4674-b8ee-7c9426687d9b"><printWhenExpression><![CDATA[$P{ordenadorDespesa} != null]]></printWhenExpression></reportElement><textElement><fontfontName="SansSerif"isBold="true"/></textElement><text><![CDATA[Ordenador de Despesa:]]></text></staticText>
2-
<staticText><reportElementx="1"y="83"width="139"height="20"uuid="ffb97e30-9c11-4674-b8ee-7c9426687d9b"><printWhenExpression><![CDATA[!$P{ordenadorDespesa}.equals( null )]]></printWhenExpression></reportElement><textElement><fontfontName="SansSerif"isBold="true"/></textElement><text><![CDATA[Ordenador de Despesa:]]></text></staticText>
Não seria apenas marcar na propriedades do parâmetro “Blank When null”?
guilhermebhte
Não achei esta opção.
Não é o campo parâmetro e sim um label.
javaflex
As linhas estao vindo do banco ou alguma fonte de dados? Se estao, é mais eficiente e prático esse parametro/condição ficar na query da fonte de dados.
guilhermebhte
Estão sendo passados por parâmetro. Não tem consulta em banco no relatório.
javaflex
Como é a mágica? De onde vem essas linhas que não podem ser filtradas antes de serem passadas pro relatório? Não precisa ser banco de dados para conseguir filtrar o necessário.
guilhermebhte
Não entendi o que disse.
É isto: <parameter name="ordenadorDespesa" class="java.lang.String"/> ?
javaflex
Se você tem linhas no seu relatório que precisam ser escondidas ou não como você falou, em algum momento essas linhas são passadas para o relatório. Se algumas linhas devem ou não ser exibidas dependendo de alguma condição, então filtra antes de passar pro relatório.
guilhermebhte
Porque não posso passar nulo ?
darlan_machado
Pode.
Mas aí você está definindo lógica num relatório. Lógicas nunca devem estar nos relatórios.
guilhermebhte
Não posso porque ?
O mesmo relatório pode ser mostrado de formas diferentes e acho que esta lógica deve estar no relatório.
Se não como faria ?
javaflex
Por que insistir em fazer gambiarra? Isso não é responsabilidade do documento a ser gerado, é da parte que faz o acesso a dados, seja lá qual for a fonte de dados, banco, List em memória, etc. Relatório é apresentação, como se fosse uma tela.
darlan_machado
Você faria:
Se está usando um banco de dados como datasource, diretamente na query. Afinal, a regra a ser aplicada pode ser inserida na consulta.
Se usa uma collection como datasource, então filtra-se antes de montar a coleção.