Qualche tempo fa, abbiamo visto come usare iReport per realizzare file jasper da utilizzare con java per produrre le nostre stampe in formato pdf.
Proviamo ora a vedere qualcosa di più complicato…
Se si avessero difficoltà a seguire il presente articolo, si raccomanda la lettura del precedente.
Ammettiamo di dover produrre una stampa come la seguente (in cui ogni tabella può essere lunga a piacimento):
e che i nostri dati siano contenuti in un file XML come ad esempio questo:
<?xml version="1.0" encoding="UTF-8"?> <stampaIntervento data="15-15-2025" img="D:\workspace\flex3\ProgrammiTriennali\assets\LogoLomb.gif"> <datiIntervento> <dato> <localizzazione>00140 - Localita 1</localizzazione> <descrizione>Descrizione molto lunga per fare andare a capoil campo. Funziona bene</descrizione> </dato> <dato> <localizzazione>00141 - Localita 2</localizzazione> <descrizione>Quattro chiacchiere</descrizione> </dato> <dato> <localizzazione>00142 - Localita 3</localizzazione> <descrizione>Cinque chiacchiere</descrizione> </dato> </datiIntervento> <datiFinanziamento> <finanziamento> <tipo>Tipo di finanziamento molto lungo! Va a capo se scrivo cose troppo lunghe?</tipo> <ianno>12.500</ianno> <iianno>25.000</iianno> <iiianno>100.0000</iiianno> </finanziamento> <finanziamento> <tipo>Tipo di finanziamento 2</tipo> <ianno>120.500</ianno> <iianno>250.000</iianno> <iiianno>1.000.0000</iiianno> </finanziamento> </datiFinanziamento> </stampaIntervento>
Come possiamo procedere?
Iniziamo…
- Creiamo un nuovo report
- Scegliamo il template (orizzontale, verticale, ecc.)
- Creaimo una sorgente dati (datasuorce) di tipo xml per il report padre. Ricordiamo che per farlo ci basta cliccare sul bottone mostrato nella figura qui sotto e premere “New” nella schermata che comparirà.
Dopo aver premuto “New” ci troveremo di fronte l’elenco di tutti i possibili datasource; noi scegliamo “XML file datasource” facendo attenzione a tenere spuntata la voce “Usa l’espressione report XPath quando riempi il report”, come mostrato nella figura che segue. Chiamiamo questa sorgente dati “Intervento”
- Apriamo il nuovo report in visualizzazione XML ed eliminiamo l’attributo “language” dal tag jasperReport
- Torniamo nel Designer, facciamo clik col dx sul nome del report e apriamo “l’Edit Query”. Scegliamo XPath come linguaggio e diamo “/” come query
- Aggiungiamo TUTTI i campi di cui vogliamo avere il valore nel nostro report (come visto nello scorso articolo, ci basta selezionarli sulla dx e trascinarli in basso). Fatto tutto, premiamo “OK”
- Siamo tornati nel Designer; clicchiamo col dx sulla voce “Detail 1” (nel Report Inspector) e scegliamo “Add Another Detail Band” (questa operazione deve essere ripetuta per ogni sezione del nostro report; nel nostro caso abbiamo 3 sezioni del documento (Dati, Finanziamenti, Immobili) e quindi dobbiamo creare 3 sezioni di tipo Detail)
Ci siamo?
Ora nella sezione di iReport “Detail 1” aggiungiamo il testo statico “DATI” e una “Table Component”. Questa componente racchiude il “segreto” per realizzare quello che vogliamo senza usare i subreport…
Seguiamo i seguenti passi:
- Scegliamo come sorgente dati “Intervento” e sistemiamo la tabella nella prima sezione Detail
- A questo punto click con dx su “New Dataset 1” e scegliamo “Edit Query”. Impostiamo XPath come linguaggio e “/stampaIntervento/datiIntervento/dato” come query
- Sulla destra, trasciniamo “localizzazione” e “descrizione” in basso e premiamo “OK”
- Ora editiamo la tabella e trasciniamo i campi presenti in “New Dataset 1/Campi” nelle colonne in cui vogliamo vengano visualizzati
- Torniamo nel Designer del report, facciamo click col dx sulla tabella e scegliamo “Edit table datasource”
- Scegliamo “New Dataset 1” come Sub dataset, “Usa espressione Datasource”
e poi aggiungiamo questa stringa in basso:((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/stampaIntervento/datiIntervento/dato")
Due parole sul passo 6.
Questa stringa comunica alla tabella di usare il data source del report padre ($P{REPORT_DATA_SOURCE}). Gli dice poi che tale datasource è di tipo JRXmlDataSource; infine recupera da tale data source (che alla fine è il nostro file xml) il sottoinsieme dei dati che ci interessano.
Il procedimento da 1 a 6 dovrà essere ripetuto per ogni sezione del documento.
Eseguiamo.
You saved my day today 😉
grazie! ottimo funziona
io ho la versione 4.0.2 di ireport e non riesco a trovare “Edit table datasource” —-
Grazie di esistere 🙂
Davvero interessante… si può fare a meno dei subreport.