Wiele zapytań w jednym dokumencie jasper

Do tej pory zawsze ograniczała mnie jedna rzecz z Jasperem-donosi.
Mogę napisać tylko jedno zapytanie o dane w każdym dokumencie.
Kiedy muszę napisać kolejne zapytanie, muszę utworzyć podpreport, przekazać jego potrzebne parametry i tak dalej.

Ale zdecydowanie nie jestem przekonany, że to dobry sposób, aby to zrobić.

Czy jest inny sposób na odpalenie wielu zapytań o dane w jednym dokumencie jasper?

Author: Alex K, 2011-09-20

1 answers

Możliwe jest wykonanie wielu zapytań z jednego Raportu za pomocą subDataset i datasetRun. Zachowanie to przypomina osadzenie jednego lub więcej podreportów w jednym pliku raportu.

Zdefiniuj subDataset tak:

<subDataset name="dataset1">
    <parameter name="someParam" class="java.lang.String"/>
    <queryString><![CDATA[SELECT column1, column2 FROM table1 WHERE column1=$P!{someParam}]]></queryString>
    <field name="column1" class="java.lang.String"/>
    <field name="column2" class="java.lang.String"/>
</subDataset>

Subdatasy mogą mieć parametry, pola, zmienne i grupy, tak jak raport może. Każdy subdataset może mieć własne zapytanie, a raport może mieć tyle subdatasów, ile chcesz.

Aby użyć subdataset, musisz zdefiniować datasetRun. Można to zrobić tylko wewnątrz poszczególnych elementów: wykresów, tabel i list. Użyjemy listy, ponieważ zachowuje się prawie dokładnie tak, jak inny zespół szczegółów.

Ten kod definiuje listę, która używa naszego subdataset:

<componentElement>
    <reportElement x="0" y="0" width="100" height="40"/>
    <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
        <datasetRun subDataset="dataset1">
            <datasetParameter name="someParam"><datasetParameterExpression><![CDATA["some value for column 1"]]></datasetParameterExpression></datasetParameter>
        </datasetRun>
        <jr:listContents height="40">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression class="java.lang.String"><![CDATA[$F{column1}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="20" width="100" height="20"/>
                <textElement/>
                <textFieldExpression class="java.lang.String"><![CDATA[$F{column2}]]></textFieldExpression>
            </textField>
        </jr:listContents>
    </jr:list>
</componentElement>

Kilka uwag:

  • Element jr:listContents jest analogiczny do elementu pasma detali. Możesz umieścić w nim prawie wszystkie inne elementy.

  • Element datasetRun jest podobny do elementu podprogramu. Może mieć dataSourceExpression lub connectionExpression wewnątrz, które zmienią skąd pochodzą dane. Jeśli żaden z nich nie jest obecny, używane jest źródło danych raportu.

  • Ten sam subDataset może być używany przez wiele datasetRuns, dzięki czemu można łatwo uruchomić zapytanie wiele razy z różnymi parametrami.

 65
Author: GenericJon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 10:30:47