Dříve či později při vývoji reportů nad JasperServer narazíte na požadavek, aby parametry a vstupní prvky dovolovaly zvolit více jak jednu hodnotu. Typicky je třeba prvek, kde se volí právě jeden prvek, jeden a nebo všechny, a nebo jeden až všechny. Samozřejmě, že vstupní prvky by měly mít hodnoty naplněné z databáze, což jsem popsal nedávno.
Dnes popíšu, jak vytvořit vstupní prvek s možností volby různého počtu hodnot. Základem je definice parametru. Stačí v iReport editoru, v panelu Struktura dokumentu (Document structure) kliknout pravým tlačítkem na Parametry (Parameters) a Add… > Parameter. Důležité je nastavit datový typ java.util.Collection
.
V JasperServeru pak definujeme příslušný vstupní prvek, která musí umožňovat volbu více hodnot. Máme-li k dispozici hotový Dotaz (Query) v JasperServeru pro získání hodnot, v panelu JS-Plugin 3.0 zvolíme dialog Add > Input Control a vybereme typ Multi–Select Query a vyplníme ostatní parametry stejně jako u Single–Select Query. Vstupní prvek přiřadíme do reportu (Report Unit).
Poslední a nejdůležitější je použít parametr v reportu. Jelikož hodnot může být různý počet, v dotazu použijeme omezující podmínku WHERE table.attr IN(…)
. Klasické parametry s jednou hodnotou zapisujeme pomocí $P{ParameterName}
. Pro parametry s více hodnotami existuje speciální zápis – $X{IN, table.attr, ParameterName}
, který vygeneruje celou podmínku v dotazu. Místo IN
můžete použít také NOTIN
, pokud chcete vygenerovat klauzulin NOT IN(…)
.
Vstupní prvek se zobrazí jako selectbox s více zobrazenými hodnotami, kde můžete i více hodnot zvolit.