Jump to content
Changes to the Jaspersoft community edition download ×

How i can insert xml data into table component?


cavagna.davide
Go to solution Solved by asimkin,

Recommended Posts

Hi, I'm new in this community and is my first time with jasper.

I need to create a table like this:

converted-file.png.bdf257ef97c07537c27a77929ece13a3.png

My xml file contains:

<addressbook>
    <person>
        <name>1. Richiesta ordini di acquisto</name>
    </person>
    <person>
        <name>2. Preparazione dell'ordine</name>
    </person>
        <person>
        <name>3. Approvazione dell'ordine</name>
    </person>
    <person>
        <name>4. Ricezione della merce e/o Servizio</name>
    </person>
    <person>
        <name>5. Gestione reso di merce</name>
    </person>
    <person>
        <name>6. Gestione reclami per merce non conforme</name>
    </person>
    <person>
        <name>7. Attivita' di controllo fisico della merce in magazzino</name>
    </person>
    <person>
        <name>8. Attivita' di controllo contabile carico a magazzino</name>
    </person>
    <person>
        <name>9. Contabilizzazione fatture acquisto</name>
    </person>
    <person>
        <name>10. Autorizzazione al pagamento</name>
    </person>
    <person>
        <name>11. Effettuazione del pagamento</name>
    </person>
    <person>
        <name>12. Gestione fornitori</name>
    </person>    
</addressbook>

I use a xml dataset into a table component, and use ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/person/name").

This is my code:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.1.final using JasperReports Library version 6.2.1  -->
<!-- 2016-05-06T14:55:42 -->
<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="Blank_A4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="207ca011-2a9a-46da-af14-379e7e204638">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <style name="Table_TH" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="Table_CH" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
            <topPen lineWidth="0.5" lineColor="#000000"/>
            <leftPen lineWidth="0.5" lineColor="#000000"/>
            <bottomPen lineWidth="0.5" lineColor="#000000"/>
            <rightPen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <subDataset name="Dataset1" uuid="446e4be7-391e-473a-aaf9-1a0e33dd7384">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="prova"/>
        <queryString language="xPath">
            <![CDATA[/addressbook/person/name]]>
        </queryString>
        <field name="name_1" class="java.lang.String">
            <fieldDescription><![CDATA[name_1]]></fieldDescription>
        </field>
        <group name="name_1">
            <groupExpression><![CDATA[$F{name_1}]]></groupExpression>
        </group>
    </subDataset>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <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="61" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="0" width="200" height="60" uuid="3c76f7f2-287f-4e9e-a2a6-057e77a13b3b">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                    <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
                    <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
                    <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
                </reportElement>
                <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="Dataset1" uuid="cea628fd-6105-4fb5-bd4f-17108e6a5a8c">
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/person/name")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="200" uuid="053038d4-3397-4012-932f-d42054e3295a">
                        <jr:tableHeader style="Table_TH" height="30"/>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="200" height="30" uuid="0ca1cee7-6d8c-4db9-adf9-1966a201502c"/>
                                <textFieldExpression><![CDATA[$F{name_1}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>
 

But it doesn't work.

This is my error:

net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/person/name")
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:530)
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$20(ReportControler.java:505)
    at com.jaspersoft.studio.editor.preview.view.control.ReportControler$5.run(ReportControler.java:386)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/person/name")
    at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:291)
    at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:618)
    at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:586)
    at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1020)
    at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(JRFillSubreport.java:460)
    at net.sf.jasperreports.components.table.fill.FillTableSubreport.evaluateSubreport(FillTableSubreport.java:102)
    at net.sf.jasperreports.components.table.fill.FillTable.evaluate(FillTable.java:132)
    at net.sf.jasperreports.engine.fill.JRFillComponentElement.evaluate(JRFillComponentElement.java:109)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:281)
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:504)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2026)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:752)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:259)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:119)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:558)
    at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:119)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: net.sf.jasperreports.engine.JREmptyDataSource cannot be cast to net.sf.jasperreports.engine.data.JRXmlDataSource
    at Blank_A4_1462539248676_943854.evaluate(Blank_A4_1462539248676_943854:171)
    at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:277)
    ... 16 more

 

Please someone helm me.

Thanks

Davide

Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Posted Images

  • Solution

Hi,

it seems the issue caused by empty datasource of the main report.

I was able to build a report in Jaspersoft Studio that returns required data, please find attached JRXML file.

I created XML data adapter using provided XML file, and use it as the main report datasource:

<queryString language="xPath">
<![CDATA[/]]>
</queryString>
 

The Table component has the following JSDatasource Expression:

<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/addressbook/person/name")]]></dataSourceExpression>[/code]

Also, find attached printscreen of the report output.

Hope, this helps.

Best regards,
Andrew

Link to comment
Share on other sites

In Studio, you can use a different data adapter from the main report by setting a default data adapter for the table dataset.  To do this, select the dataset for your table in outline view. Then in Properties view for the data set, on the Dataset tab, set the Default Data Adapter.  When you do this, this overrides the data adapter that it inherits from the main report.

This is a JSS property only.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...