2013-02-18 11 views
5

Sto cercando di ottenere una tabella con gli stessi dati nel mio rapporto principale utilizzando Jasper/iReport. Come posso far trasferire il Json?Jasperreports - come ottenere JSON per popolare un sottoreport

In Modifica tabella datasource ho provato:

((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}) 

new ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}) 

$P{REPORT_DATA_SOURCE} 

$P{REPORT_CONNECTION} 

Tutto ciò compilazione, ma nessuno dei quali in realtà generano un tavolo. Qualche idea? Non esiste alcun metodo come cloneDataSource() per JSON, quindi qual è l'alternativa?

Il mio obiettivo finale è semplice: passare i dati JSON e utilizzarli per generare un grafico, quindi disporre di una tabella che visualizza le stesse informazioni. Ho lavorato per giorni su questo, Jasper mi sta dando dei brutti momenti. Per favore aiuto!

risposta

7

Ho riscontrato problemi simili durante l'utilizzo dei report secondari. Sembra che l'origine dati JSON venga consumata dal report principale quindi è necessario richiamare subDataSource() per ottenere una nuova origine dati per i report secondari e forse anche per le tabelle - non ancora testato ...

Data Source espressione: ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()

+0

ah sì che era il mio problema. non l'ho ancora provato lo farò ora. –

+1

'' mi ha sistemato tutti –

+0

è non funziona per me. Ottengo un errore net.sf.jasperreports.engine.data.JsonDataSourc e non può essere risolto o non è un tipo – Yebach

1

Se qualcuno sta usando la funzione JasperReports nuovo libro Report (disponibile nella versione 6+) e si desidera utilizzare un JsonDataSource, questo è il modo per passare il payload jSON alle subreports:

<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd"> 
    <subreportParameter name="REPORT_DATA_SOURCE"> 
    <subreportParameterExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()]]></subreportParameterExpression> 
    </subreportParameter> 
    <subreportExpression><![CDATA["PROFILES_cover.jasper"]]></subreportExpression> 
</p:subreportPart> 

Si potrebbe anche passare un sottoinsieme del payload json fornendo n posizione dell'ode come parametro del metodo subDataSource(java.lang.String selectExpression). Esempi:

.subDataSource("Northwind.Customers") 

o

.subDataSource("Northwind.Customers(Country == USA)") 
Problemi correlati