Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use table component added to JasperReports 3.7.2 with grails jasper plugins?

I would like to use new table component added to JasperReports 3.7.2 with grails jasper plugins. I find this new component useful to generate tables.

I have define Table dataset 1, and some fields (ex : $F{name}), problem, all my fields values are null. I have also define fields (not attached with table), and I get values.

Here is my table code :

<subDataset name="Table Dataset 1">
    <field name="name" class="java.lang.String"/>
    <field name="signal" class="java.lang.Double"/>
    ...
</subDataset>

<componentElement>
<reportElement key="table" style="table" x="0" y="0" width="802" height="50"/>
<jr:table 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="Table Dataset 1">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]></dataSourceExpression>
</datasetRun>
<jr:column width="90">
<jr:columnHeader style="table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="90" height="30"/>
<textElement/>
<text><![CDATA[Name]]></text>
</staticText>
</jr:columnHeader>
<jr:detailCell style="table_TD" height="20" rowSpan="1">
<textField>
<reportElement x="0" y="0" width="90" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
    ...

I guess, my problem is due to this part (I'm using JREmptyDataSource) :

<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource(1)]]></dataSourceExpression>

But how can I get my <MODEL_DATA> with Table component ?
(eg : chain(controller:'jasper',action:'index',model:[data:<MODEL_DATA>],params:params))

like image 879
Fabien Barbier Avatar asked Apr 27 '10 16:04

Fabien Barbier


2 Answers

Here is the solution :

Keep :

<subDataset name="Table Dataset 1">
    <field name="name" class="java.lang.String"/>
    <field name="signal" class="java.lang.Double"/>
    ...
</subDataset>

and use :

<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>

Table component will now use your actual dataSource (your MODEL_DATA) !

like image 148
Fabien Barbier Avatar answered Sep 17 '22 13:09

Fabien Barbier


Above answer works fine for SQL expressions, but if you are using an XML datasource, the xPath query must also be included, just like with the main data set.

<subDataset name="Tickets">
    <field name="barcode" class="java.lang.String">
        <fieldDescription><![CDATA[barcode]]></fieldDescription>
    </field>
</subDataset>
like image 25
ianaré Avatar answered Sep 18 '22 13:09

ianaré