Jak je řešena editovatelnost modrých tiskopisů pro ABRA FlexiBee

Knihovna JasperReports, kterou FlexiBee využívá je celkem jednoduchá, ale přesto umožňuje spoustu kouzel a triků. Jedním z nástrojů, kterými se dá „kouzlit“, jsou subreporty a jejich datové zdroje (DataSource).

Subreporty, DataSource a WSValueObject

Pokud chcete v tiskopisu nad evidencí Vydané faktury vypsat položky, neobejdete se bez subreportu. Je to samostatný report, který získá z hlavního reportu svá data (většinou jiná) a nad nimi pak pracuje. Položky dokladu jsou ve FlexiBee samostatné objekty, jejichž kolekci obsahuje každá hlavička dokladu. Proto je v podstatě jediná možnost je vypsat subreportem.

Předání dat do subreportu se provádí vytvořením tzv. DataSource. FlexiBee běžně v tiskových sestavách používá WSBeanCollectionDataSource, což je trochu poupravený standardní JRBeanCollectionDataSource. V konstruktoru se mu předává kolekce (List, Set, …) objektů, které má subreport vytisknout.

Ve většině subreportů v tiskových sestavách FlexiBee naleznete jako Connection/DataSource expression něco jako

new cz.winstrom.reports.impl.WSBeanCollectionDataSource( $F{kolekceObjektu} )

Předkem všech VO (value object) ve FlexiBee je cz.winstrom.vo.WSValueObject. Tento rodič obsahuje metodu pro získání ID záznamu (getId()), metodu vracející „sám sebe“ getThis() a metodu getValue(String propertyName), která vrací objekt s hodnotou vlastnosti. Všech těchto metod, především getValue(), se ve FlexiBee tiskopisech často využívá. Hlavně pokud se jeden report používá pro různá VO, která ovšem mají shodné vlastnosti.
Do každého subreportu je také možné předat spoustu parametrů. To jsou samostatné objekty, které jsou v subreportu přístupné jako $P{nazevParametru}. Ve většině tiskopisů jako parametry naleznete objekty, sloužící ke zpřístupnění částí FlexiBee, které nejsou z VO přímo dostupné. Příkladem mohou být parametry _LOADER a _ADAPTER.

Jak je to tedy uděláno?

Kromě JRBeanCollectionDataSource (respektive WSBeanCollectionDataSource) obsahuje knihovna JasperReports také JsonDataSource. Tento zdroj dat pro subreport umožňuje, jak už jeho název napovídá, zpracovávat JSON a v subreportu k němu přistupovat jako k běžnému VO. Tím je zajištěno zpracování všech řádek konfiguračního souboru.
Jenže to nestačí. V JSONech jsou jen lokalizace a název vlastnosti. Proto je do subreportu jako parametr předáván i objekt, ze kterého se pomocí metody getValue načítá hodnota.

Jak prosté milý Watsone :-).

A co dál?

Že bych napsal seriál o tom jak ve FlexiBee upravovat reporty?

ABRA FlexiBee, Modré tiskopisy, Faktura, Customizovatelnost, iReport

-
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.