Esse assunto já está batido, eu sei, mas todas as implementações, ou faltam algo, ou não dão certo comigo…
Eu quero passar um simples texto: No caso, o número da versão do relatório, onde eu controlo pelo sistema…
Fica algo assim no rodapé: “1.2v”
No meu sistema está:
E no meu relatório, está (dentro de um campo texto): $P{VERSAO}
Simplesmente não funciona… Eu devo estar fazendo algo de errado, ou então faltando com algum outro detalhe que não sei qual é…
O pessoal poderia me dar uma luz?
(Desculpe a pergunta noob, mas eu venho do Rave Reports, e a passagem de parâmetros para o relatório é bem simples, e estou me perdendo com o IReports)
Não existe complicação em passar parâmetros para um relatório. Você pode postar o código onde o relatório é criado para que possamos ver se não tem nada de errado…
Esse é o meu método para implementar o relatório.
[code]public void geraRelatorio(String versao, String titulo, String nomeRelatorio, List conteudo, HashMap parametros){
JRDataSource jrds = new JRBeanCollectionDataSource(conteudo);
JasperReport jasper = null;
parametros.put(“LOGO”,getClass().getResource(“logo.jpg”));
parametros.put(“TITULO”,titulo.toUpperCase());
parametros.put(“VERSAO”,getClass().getResource(“v”+versao));
JasperPrint impressao = null;
try {
jasper = (JasperReport) JRLoader.loadObject("D:/JAVA/Sistema/build/classes/Relatorios/"+nomeRelatorio+".jasper");
impressao = JasperFillManager.fillReport(jasper, parametros, jrds);
} catch (JRException ex) {
Logger.getLogger(Celula_Precos.class.getName()).log(Level.SEVERE, null, ex);
}
JasperViewer jrviewer = new JasperViewer(impressao,false);
jrviewer.setTitle(getTitle()+" - Relatórios do Sistema");
jrviewer.setVisible(true);
}[/code]
Outra coisa, é que até agora, eu não consegui colocar o relatório para funcionar com o caminho relativo, ou seja, não funciona dentro de um JAR, acessando de outra máquina… (Nem tenho ideia como vou resolver isso… Vou deixar isso para outro tópico, por hora, funcionando os parâmetros, já seria legal)
É um pouco grande, mas o meu arquivo de relatório é este:
<?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="report name" pageWidth="595" pageHeight="842" columnWidth="535" 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="VERSAO" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="VALOR" class="java.lang.Double">
<fieldDescription><![CDATA[VALOR]]></fieldDescription>
</field>
<field name="LINK" class="java.lang.String">
<fieldDescription><![CDATA[LINK]]></fieldDescription>
</field>
<field name="ID_PRODUTO" class="java.lang.String">
<fieldDescription><![CDATA[ID_PRODUTO]]></fieldDescription>
</field>
<field name="DESCRICAO" class="java.lang.String">
<fieldDescription><![CDATA[DESCRICAO]]></fieldDescription>
</field>
<field name="DATA_CAD" class="java.lang.String">
<fieldDescription><![CDATA[DATA_CAD]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="22" splitType="Stretch">
<textField>
<reportElement x="65" y="0" width="290" height="20"/>
<textElement>
<font size="9"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{DESCRICAO}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="65" height="20"/>
<textElement>
<font size="9"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{ID_PRODUTO}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="455" y="0" width="100" height="20"/>
<textElement textAlignment="Right">
<font size="9"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{VALOR}.toString()]]></textFieldExpression>
</textField>
<textField>
<reportElement x="355" y="0" width="100" height="20"/>
<textElement textAlignment="Right">
<font size="9"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{DATA_CAD}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="25" splitType="Stretch">
<textField>
<reportElement x="455" y="0" width="100" height="20"/>
<textElement textAlignment="Right">
<font fontName="Verdana" size="9"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$P{VERSAO}]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Bom dia
Ja tentou passar o parametro dessa maneira: $P!{VERSAO}
Att.
Você se certificou se o conteúdo do parâmetro VERSAO foi preenchido como o desejado, pois você pode estar passando o valor null para o Jasper. Tente mostrar o valor no console via log ou System.out para ter certeza disso:
Problema resolvido! Era isso mesmo, a entrega de valor NULL! :evil:
O meu teste então ficou assim:
System.out.println("v"+versao);
System.out.println(getClass().getResource("logo.jpg").getPath());
System.out.println(titulo.toUpperCase());