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ą:
Č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:
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.
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.*
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())
Sveiki, gal kas turit ar žinot iš kur gauti jaspersaerver lietuviškus properties failus?
Nope 🙁 Teko pačiam šiek tiek susilietuvinti..
Kaip tai dariau, bet „nedadariau”, aprašiau čia: http://paulius.bautrenas.lt/blog/?p=168