[RESOLVIDO] Ireport/jasperreport: Passagem de parâmetro entre o master e o subreport

Pessoal, boa tarde…

Estou tentando fazer algo que parece ser tão simples mas não estou conseguindo, preciso que em um relatório principal exista um parâmetro booleano, e que esse valor seja passado para um parâmetro no sub report (onde vou usá-lo). Acontece que quando faço, parece que nada é enviado e por isso não funciona. Abaixo o código do jasper e os passos que executei (os programas são de testes simples, o original é maior mas tem a mesma idéia)

Sub report

<?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report2_subreport1" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <parameter name="observacaoCurso" class="java.lang.String"/> <parameter name="emiteAssinatura" class="java.lang.Boolean"> <defaultValueExpression><![CDATA[]]></defaultValueExpression> </parameter> <background> <band splitType="Stretch"/> </background> <detail> <band height="125" splitType="Stretch"> <textField> <reportElement x="40" y="0" width="458" height="48"/> <textElement> <font size="14"/> </textElement> <textFieldExpression><![CDATA[$P{emiteAssinatura}]]></textFieldExpression> </textField> <textField> <reportElement x="40" y="77" width="458" height="48"/> <textElement> <font size="14"/> </textElement> <textFieldExpression><![CDATA[$P{observacaoCurso}]]></textFieldExpression> </textField> </band> </detail> </jasperReport>

report principal

<?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> <defaultValueExpression><![CDATA["D:\\\\"]]></defaultValueExpression> </parameter> <parameter name="observacaoCurso" class="java.lang.String"/> <parameter name="emiteAssinatura" class="java.lang.Boolean"> <defaultValueExpression><![CDATA[true]]></defaultValueExpression> </parameter> <background> <band splitType="Stretch"/> </background> <title> <band height="128"> <subreport> <reportElement key="zica" x="0" y="0" width="555" height="97"/> <subreportParameter name="observacaoCurso"> <subreportParameterExpression><![CDATA[$P{observacaoCurso}]]></subreportParameterExpression> </subreportParameter> <subreportParameter name="emiteAssinatura"> <subreportParameterExpression><![CDATA[$P{emiteAssinatura}]]></subreportParameterExpression> </subreportParameter> <connectionExpression><![CDATA[]]></connectionExpression> <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report2_subreport1.jasper"]]></subreportExpression> </subreport> <staticText> <reportElement x="32" y="105" width="237" height="20"/> <textElement/> <text><![CDATA[Static text]]></text> </staticText> </band> </title> </jasperReport>

Como podem ver eu tenho no relatório principal a passagem de dois parâmetros para o subreport via mapeamento (feito isando ireport), quando executo coloco true e um texto qualquer para os dois campos, e eles deveriam ser impressos na parte do sub report, mas não funciona, fica branco.

saberiam dizer se tem que fazer algo além do mapeamento? todos os sites que achei só falam dele

sds

Cara, não sei se é o caso pra você, mas nos reports que faço, para os sub-reports eu seto a conexão como vindo do report principal. Estou vendo na linha 26 do código do seu principal que este parâmetro está vazio

opa,

então essa foi uma das tentativas, com a conexão tb não foi…estou fazendo outra coisa errada, comparei com um outro report que tem sub e funciona, mas parecem exatamente iguais.

Bom… uma outra coisa que faço é deixar ambos (report principal e sub-report) no mesmo local. Daí, o parâmetro que informa o sub-report nem precisa do caminho, ficando só o nome do subreport - tanto é que eu deleto o parâmetro SUBREPORT_DIR

Eu descobri que o problema era outro, o relatório master por algum motivo que ainda não descobri estava usando a versão anterior do sub report (sem a modificação). Descobri após refazer algumas vezes o processo e depois de uma delas, sem motivo aparente ele funcionar. Depois precisei alterar um texto estático, e percebi que a versão via master saia o antigo e o diretamente no sub report saia o correto.

apesar de ainda não entender o que gerou isso vou marcar como resolvido pq a parte dos parâmetros deu certo

Só para registro a causa do problema foi alguma “sujeira” que ficava no diretório temporário do tomcat, por isso mesmo fazendo as alterações, o report master parecia sempre usar o antigo (mesmo que ao se chamar diretamente o sub aparecesse correto). Para resolver bastou apagar o diretório, ai funcionou tudo normal… perdi horas procurando isso, que zica