JasperServer date input parameters: kaip nustatyti gudrias „default“ vertes

data_defaul_value

Kažkada sau prisigalvojau galvos skausmo (gi lengvai gyventi neįdomu) ir nusprendžiau kai kurioms savo JasperServer ataskaitoms suprogramuoti standartines (angl. default) ataskaitos parametrų reikšmes. Konkrečiau, norėjau kad vienos ataskaitos būtų visada automatiškai generuojamos „už praėjusį mėnesį“, o vykdant kitas ataskaitas, vartotojui būtų siūlomos dažniausiai pageidaujamos datos, pav. pirma ir dabartinė einamojo mėnesio diena.

Pirmąją užduoti nusprendžiau realizuoti grynai SQL kode. Duomenis traukiu iš Oracle 11g DB, todėl SQL užklausoje galėjau sau leisti štai tokią sąlygą:

where
data between trunc(trunc(sysdate,'MM')-1,'MM') and trunc(sysdate,'MM')-1

Iš principo, šioje sąlygoje trunc(sysdate,’MM’)-1 – gražina paskutinę praėjusio mėnesio dieną, o trunc(trunc(sysdate,’MM’)-1,’MM’) – pirmą praėjusio mėnesio dieną.

Pavyzdžiui, įvykdžius štai tokią užklausą:

select
sysdate,
trunc(trunc(sysdate,'MM')-1,'MM'),
trunc(sysdate,'MM')-1
from dual

Gausime tokį rezultatą:

sql

Čia kaip ir viskas aišku, tačiau vien tik SQL kodu antrosios sau užsibrėžtos užduoties išspręsti nepavyks. Teks pasitelkti Java ir Jasper input parametrų savybę „Defaul Value Expression“.

Tarkim, turim du ataskaitos parametrus „Data nuo“ ir „Data iki“, kurie vykdant ataskaitą susigeneruoja taip:

data_be_defaul_value

Mes norim, kad „Data nuo“ visada įgautų pirmą mėnesio dieną, o „Data iki“ esamą mėnesio dieną. Kitaip sakant, jeigu šiandien yra 2014-06-02, mes norime, kad „Data nuo“ būtų lygi 2014-06-01, o „Data iki“ – 2014-06-02. 

data_defaul_value

Kad gautume pageidaujamą rezultatą, parametro „Data nuo“ savybėse (angl. properties), parametre „Defaul Value Expression“ įrašome štai tokį kodą:

new SimpleDateFormat("yyyy-MM-dd").format(
DateUtils.truncate(DateUtils.addMonths(new Date(),0),java.util.Calendar.MONTH ))

O parametro „Data iki“ savybėse (angl. properties),  „Defaul Value Expression“ įrašome štai tokį kodą:

new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date())

Kadangi pirmajame kode panaudojome klasę DateUtils, šią klasę yra būtina įtraukti į kuriamą ataskaitą. iReport aplinkoje, tai yra atliekama ataskaitos savybių (angl. Properties) punkte „Imports“  įrašius štai tokį kodą:

org.apache.commons.lang.time.*
imports

imports2

Note for myself: Neseniai prisireikė duomenis ištraukti už vakar dieną. Tai realizavau su tokiomis „Defaul Value Expression“ reikšmėmis:

new Date((new Date()).getTime()-24*60*60*1000)
new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date())

2 komentarai

  1. Marius

    Sveiki, gal kas turit ar žinot iš kur gauti jaspersaerver lietuviškus properties failus?

    Atsakyti

Parašykite komentarą

El. pašto adresas nebus skelbiamas.