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?
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
lubconnectionExpression
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.
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