background image

 

 

Generowanie raportów

1

1. Wprowadzenie

 przykładowy problem,

 podstawowe własności narzędzi raportujących.

2. JasperReports

 struktura raportu,

 parametry, zmienne i pola,

 generowanie raportu (API).

3. iReport

background image

 

 

Wprowadzenie

2

Informacje zgromadzone w bazie danych są przede wszystkim wykorzystywane do 

tworzenia analiz i raportów. Bezpośrednia analiza wyników zapytania SQL może 

być trudna, szczególnie dla osób nie związanych zawodowo z obsługą baz danych. 

Aby przedstawić wyniki w formie akceptowalnej dla tych osób używa się narzędzi 

służących do generowania raportów.

Narzędzia przeznaczone do tworzenia raportów:

http://207.178.67.98/java/readerschoice2004/frameliveupdate.cfm?BType=19

background image

 

 

Wprowadzenie

3

zamowienia

zamowienia

id_zamowienia

data_zakupu

...

id_kontrahenta

towary

id_towaru

ilosc

cena

id_zamowienia

kontrahenci

kontrahenci

id_kontrahenta

nazwa

adres

...

background image

 

 

Wprowadzenie

4

Przykładowe raporty:

1. Wartość sprzedaży w zadanym okresie:

SELECT SUM(t.ilosc*t.cena) FROM towary t 

JOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia 

WHERE z.data<'...' AND z.data<'...'

2. Bestsellery:

SELECT t.id_towaru, SUM(t.ilosc) FROM towary t 

JOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia 

WHERE z.data<'...' AND z.data<'...' 

GROUP BY t.id_towaru LIMIT ...

background image

 

 

Wprowadzenie

5

3. Najlepsi klienci:

SELECT k.nazwa, SUM(t.ilosc*t.wartosc) FROM zamowienia z 

JOIN towary t ON t.id_zamowienia=z.id_zamowienia 

JOIN kontrahenci k ON k.kontrahent_id=z.kontrahent_id 

WHERE z.data<'...' AND z.data<'...' 

GROUP BY k.kontrahent_id LIMIT ...

background image

 

 

Wprowadzenie

6

Narzędzie do generowania raportów powinno umożliwiać:

 stworzenie raportu na bazie zapytania SQL,

 eksport raportu do popularnych formatów danych (pdf, html, excel, csv, ...),

 obsługę zewnętrznych parametrów sterujących raprtem.

Istnieje wiele narzędzi służących do przygotowania raportów. Wśród darmowych na 

wyróżnienie zasługuje JasperReports http://jasperreports.sourceforge.net/. 

background image

 

 

Wprowadzenie

7

background image

 

 

JasperReports

8

Podstawowe cechy JasperReports:

1. Samodzielna biblioteka w Javie, do wykorzystania we własnych programach.

2. Możliwość tworzenia podraportów.

3. Eksport raportów do formatów: PDF, XML, HTML, CSV, XLS, RTF, TXT.

4. Wykresy.

5. Obsługa lokalizacji.

7. Skalowalność – brak wewnętrznych ograniczeń na rozmiar raportu.

8. Rozszerzalność.

9. Dostępność narzędzi wspomagających.

10. Współpraca z wieloma mechanizmami dostępu do danych: JDBC, EJB, POJO, 

Hibernate, XML.

background image

 

 

JasperReports

9

Struktura dokumentu XML:

<?xml version="1.0"?>

<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN" 
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

<jasperReport name="bestsellery" ... >

...

</jasperReport>

background image

 

 

Parametry

10

Parametry przekazywane z zewnątrz:

<parameter name="Pdate_from" isForPrompting="false"

class="java.lang.String">

<defaultValueExpression>

<![CDATA[""]]>

</defaultValueExpression>

</parameter>

...

<parameter name="Plimit" isForPrompting="false">

<defaultValueExpression>

<![CDATA["10"]]>

</defaultValueExpression>

</parameter>

Dostęp do parametru uzyskuje się stosując konstrukcję:

 $P{nazwa}

.

background image

 

 

Wbudowane parametry

11

Wbudowane parametry (wybrane):

REPORT_PARAMETERS_MAP

 – mapa wszystkich parametrów (

java.util.Map

).

REPORT_CONNECTION

 – połączenie z bazą danych (

java.sql.Connection

).

REPORT_DATA_SOURCE

 – źródło danych (

JRDataSource

).

REPORT_LOCALE

 – lokalizacja (

java.util.Locale

).

REPORT_RESOURCE_BUNDLE

 – zlokalizowane komunikaty 

(

java.util.ResourceBundle

).

REPORT_CLASS_LOADER

- obiekt używany podczas wypełniania raportu do 

ładowania zasobów takich jak obrazki, fonty, podraporty 
(

java.lang.ClassLoader

).

IS_IGNORE_PAGINATION

 – jeśli ustawiony na 

java.lang.Boolean.TRUE

 raport 

nie będzie dzielony na strony.

background image

 

 

Pola

12

Pola - atrybutów otrzymane w wyniku zapytania:

<field name="id_towaru" class="java.lang.Integer"/>

<field name="suma" class="java.lang.Double"/>

Dostęp do pola uzyskuje się stosując konstrukcję:

 $F{nazwa}

.

background image

 

 

Zmienne

13

Dodatkowe wewnęytrzne zmienne raportu:

<variable name="Vlp" class="java.lang.Integer"

resetType="Report" calculation="Nothing">

<variableExpression>

<![CDATA[

new java.lang.Integer($V{Vlp}.intValue() +1)

]]>

</variableExpression>

<initialValueExpression>

<![CDATA[

new java.lang.Integer(0)

]]>

</initialValueExpression>

</variable>

Dostęp do zmiennej uzyskuje się stosując konstrukcję:

 $V{nazwa}

.

background image

 

 

Zapytanie SQL

14

Zapytanie SQL przekazuje się następująco:

<queryString>

<![CDATA[SELECT t.id_towaru, SUM(t.ilosc) AS suma

FROM towary t
JOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia 
WHERE z.data<'$P!{Pdate_from}' 
AND z.data<'$P!{Pdate_to}'
GROUP BY t.id_towaru LIMIT $P!{Plimit}]]>

</queryString>

Jeśli parametr ma zostać użyty w zapytaniu SQL powinien być przekazany przez 

$P

!

{parametr}

.

background image

 

 

Sekcje raportu

15

Raport składa się z następujących sekcji:

 background

 – tło raportu,

 title

 – nagłówek raportu,

 pageHeader

 – nagłówek strony raportu,

 columnHeader

 – nagłówek tabeli (nazwy atrybutów),

 groupHeader

 – nagłówek grupy danych,

 detail

 – zawartość raportu – sekcja jest powtarzana dla każdego rekordu danych,

 GroupFooter

 – stopka grupy,

 ColumnFoter

 – stopka tabeli,

 PageFooter

 – stopka strony,

 LastPageFooter

 – stopka ostatniej strony,

 Summary

 - podsumowanie.

background image

 

 

Sekcje raportu

16

Przykładowa sekcja:

<pageHeader>

<band height="30">

<rectangle>

<reportElement x="0" y="0" width="555"

height="25"/>

<graphicElement/>

</rectangle>

<staticText>

<reportElement x="0" y="0" width="555"

height="25"/>

<textElement textAlignment="Center">

<font fontName="Helvetica" size="18"/>

</textElement>
<text>Bastsellery</text>

</staticText>

</band>

</pageHeader>

background image

 

 

Sekcje raportu

17

Sekcja detail:

<detail>

<band height="20"  isSplitAllowed="true" >

<textField isStretchWithOverflow="true">

<reportElement x="40" y="0" width="60" 

height="15"/>

<box/>

<textElement/>

</textField>

<textFieldExpression class="java.lang.Integer">

<![CDATA[$V{Vlp})]]>

</textFieldExpression>

...

</detail>

background image

 

 

Korzystanie z raportu

18

Przygotowany dokument XML opisujący raport należy zapisać w pliku 

(z rozszerzeniem jrxml). 

Aby wygenerować raport należy go:

 skompilować,

 wypełnić,

 wyświetlić na ekranie (lub wyeksportować do pliku).

background image

 

 

Kompilacja raportu

19

Do kompilacji raportu służą metody statyczne klasy:

net.sf.jasperreports.engine.JasperCompileManager

.

np.

JasperCompileManager compileReportToFile("besteller.jrxml",

"bestseller.jasper"); 

lub

JasperReport jr = compileReport("besteller.jrxml"); 

pełna nazwa klasy 

JasperReport

 to:

 

net.sf.jasperreports.engine.JasperReport

background image

 

 

Wypełnienie raportu

20

Jeśli skompilowany raport jest w pliku najpierw należy go załadować:

Klasa: 

net.sf.jasperreports.engine.util.JRLoader

. Przykład:

JasperReport jr = (JasperReport) 

JRLoader.loadObject("bestseller.jasper");

Wypełnienie raportu:

JasperPrint jp = JasperFillManager.fillReport(jr, map, con);

map

 – mapa parametrów (

java.util.Map

),

con

 – połączenie z bazą danych (

java.sql.Connection

).

background image

 

 

Wyświetlenie raportu

21

Wypełniony raport (

net.sf.jasperreports.engine.JasperPrint

) można 

wyświetlić:

JasperViewer.viewReport(jp, false);

lub wyeksportować, np:

net.sf.jasperreports.engine.JasperExportManager.

exportReportToPdfFile(jp, "bestseller.pdf"); 

background image

 

 

Narzędzia współpracujące z JasperReports

22

Istnieje wiele narzędzi służących do graficznego projektowania raportów zgodnych z 

JasperReports http://jasperreports.sourceforge.net/gui.tools.html.  Najintensywniej 

rozwijane to:

 iReport (http://ireport.sourceforge.net) – graficzny interfejs do JasperReports

 JasperAssistant (http://www.jasperassistant.com) – plugin do Eclipse (komercyjny)

background image

 

 

iReport

23

background image

 

 

Podsumowanie

24

JasperReports to intensywnie rozwijane narzędzie służące do tworzenia raportów. 

Korzystanie z niego ułatwia wiele narzędzi wspomagających graficzne 

projektowanie raportów.