web-dev-qa-db-fra.com

Transmission des paramètres du rapport principal au sous-rapport à Jasper

J'ai un JasperReport où je passe la date du rapport d'un rapport principal à un sous-rapport. Cela fonctionne bien. J'en ai également un autre où je passe le même paramètre à un sous-rapport qui a plusieurs sous-rapports. Lorsque je le prévisualise dans Ireports toutes les pages correspondant apparaissent vides, ce qui signifie que les sous-sous-rapports sont appelés mais que la date du rapport n'est pas transmise car tous les sous-sous-rapports SQL sont conditionnés par le Date du compte rendu. Comment puis-je obtenir le champ Date du rapport dans les sous-sous-rapports? Lorsque je prévisualise le sous-rapport et que je tape dans le rapport Date, toutes les dates du rapport fonctionnent, les quatre pages sont remplies avec les données correctes.

19
user1898250

Suivez les étapes ci-dessous pour passer des paramètres dans des sous-rapports:

  1. Créez le paramètre de rapport principal, tel que DATE_PARAM.
  2. Ouvrez le sous-rapport et créez un paramètre avec le même nom et le même type.
  3. Revenir au rapport principal
  4. Faites un clic droit sur le sous-rapport, sélectionnez les propriétés
  5. Choisissez un paramètre
  6. Ajouter un paramètre du rapport principal au sous-rapport avec le même nom de paramètre

Le paramètre est transmis du rapport principal au sous-rapport.

33
Ahmed Salem

Je suppose qu'ils utilisent une valeur par défaut.

En supposant que le nom du paramètre dans le rapport principal est TEST_DATE et le nom dans le sous-rapport est TEST_DATE2 alors vous devez ajouter les éléments suivants entre les éléments d'ouverture et de fermeture subreport dans le XML:

<subreportParameter name="TEST_DATE2">
    <subreportParameterExpression><![CDATA[$P{TEST_DATE}]]></subreportParameterExpression>
</subreportParameter>

Par souci d'exhaustivité, voici un exemple qui a un rapport principal et un sous-rapport, qui devrait fonctionner en changeant simplement la valeur de SUBREPORT_DIR pour indiquer où vous les avez placés.

report1.jrxml

<?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="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7e2bc622-d768-437e-8c33-fc777bc06f8c">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="TEST_DATE" class="Java.util.Date"/>
    <parameter name="SUBREPORT_DIR" class="Java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["C:\\Reports\\"]]></defaultValueExpression>
    </parameter>
    <pageHeader>
        <band height="83" splitType="Stretch">
            <textField>
                <reportElement uuid="4a2cf434-4473-48db-a89f-17a19d25cc4c" x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{TEST_DATE}]]></textFieldExpression>
            </textField>
            <subreport>
                <reportElement uuid="54c02e96-6d47-49db-9b9c-58e1dd153242" x="0" y="30" width="200" height="35"/>
                <subreportParameter name="TEST_DATE2">
                    <subreportParameterExpression><![CDATA[$P{TEST_DATE}]]></subreportParameterExpression>
                </subreportParameter>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report1_subreport1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </pageHeader>
</jasperReport>

report1_subreport1.jrxml

<?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="report1_subreport1" language="groovy" pageWidth="200" pageHeight="35" whenNoDataType="AllSectionsNoDetail" columnWidth="200" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="3cedac90-63cb-43cb-9d0f-e401543e65dd">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="TEST_DATE2" class="Java.util.Date" isForPrompting="false"/>
    <pageHeader>
        <band height="35" splitType="Stretch">
            <textField>
                <reportElement uuid="ca7f3da6-79f0-4d95-92db-6c5dbf777df9" x="0" y="15" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{TEST_DATE2}]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
</jasperReport>
17
Jacob Schoen

Si vous utilisez iReport pour créer des rapports, ouvrez le rapport principal dans iReport et sélectionnez Subreport et accédez à la section property du rapport, cliquez sur la propriété Parameters et cliquez sur Copy from master tab. De là, vous pouvez sélectionner les paramètres que vous souhaitez transmettre au sous-rapport.

11
Sharad