Jak rozchodit subreporty na JasperServeru

Každý report v napsaný v JasperReport / navržených v editoru iReport může obsahovat pouze jeden jediný zdrojový dotaz pro získání dat — definovaný v elementu <queryString>. V některých případech potřebujete získat data pomocí dvou či více dotazů. V takových případech si s jediným reportem nevystačíte — pro tento účel jsou k dispozici subreporty složící pro vložení jiných reportů do hlavní šablony. Jednoduše připojíte jiný JRXML soubor, předáte spojení, parametry, … Pokud reporty nahráváte na JasperServer, situace se trochu komplikuje o správné nastavení cesty k druhé šabloně.

Jak se pracuje s JasperServerem, jsem představil v dřívějším tutorialu (anglicky). Pro ilustraci budeme potřeboval dva reporty: hlavní, MainReport.jrxml, generující tabulku dat, a doplňkový, SubReport.jrxml, ve kterém se bude zobrazovat jeden řádek s nějakou hodnotou získanou z databáze. Reporty samozřejmě mají své parametry, nastavení a lze je spouštět v editoru samostatně. Na server je nahrajeme z iReport pomocí JS pluginu — zvolíme složku, kde je chce umístit, klikneme pravým a pomocí Add > Report Unit nahrajeme hlavní report, resp. Add > JRXML Document šablonu subreportu, protože ho nebudeme pouštět samostatně, ale vkládat do hlavního reportu.

Máme–li obě šablony nahrané na server, otevřeme JRXML soubor hlavního reportu. Pro vložení druhé šablony použijeme tlačítko Subreport z hlavní lišty a někde v report, třeba v sekci <title> nastavíme prostor pro vykreslení. Objeví se průvodce pro vytvoření. Zvolíme Just create the subreport element (Vytvořit pouze element subreport) a potvrdíme; jeho atributy nastavíme ve vlastnostech: V záložce Subreport musíme předně nastavit spojení k databázi. V roletce Connection/Data Source Expression zvolíme Use connection expression a jako výraz zadáme $P{REPORT_CONNECTION}. Tím se přenese datové spojení použité pro hlavní report. Další důležitou záložkou je Subreport (Other), kde nastavíme cestu k šabloně subreportu. Jako Subreport Expression Class (třídu výrazu) nastavíme java.lang.String a jako samotný Subreport Expression (výraz subreportu) zadáme absolutní cestu k šabloně a důležitý je i pseudo–protokol „repo“. Máme–li šablonu uloženou na JasperServeru v složkách “(Kořen) / Subreports”, pak bude výraz vypadat následovně (také uvozovky jsou důležité, protože se jedná o zápis řetězce v syntaxi jazyka Java):

"repo:/Subreports/SubReport.jrxml"

Nyní by se výsledek ze subreportu měl objevit přímo v hlavním reportu.