jasper_reports NG
Resum ràpid
jasper_reports NG millora el rendiment dels informes evitant reinicis repetits de la màquina virtual de Java i accelerant fins a un 10 % els informes basats en XML. També amplia la localització amb camps traduïbles, paràmetres, formes plurals i selecció de la configuració regional, amb eines per extreure i preparar les traduccions.
Continguts
Just després del llançament del primer release candidate de Koo, hem incorporat un conjunt de canvis interessants al mòdul jasper_reports. Aquests canvis es poden classificar en dues àrees: rendiment i localització.
Rendiment
En l’àrea de rendiment, hem creat un procés Java —que s’inicia automàticament quan s’executa el primer informe— que permet evitar el cost d’iniciar la màquina virtual de Java cada vegada que cal imprimir un informe. L’altra millora de rendiment només afecta els informes que utilitzen la interfície XML, que poden beneficiar-se d’un augment de velocitat de fins al 10% gràcies a l’ús de fitxers CSV en lloc d’XML. És totalment compatible i no canvia res quan l’usuari crea informes nous.
Localització
Si les millores de rendiment són una bona notícia, la part de localització és la meva preferida. Ara és possible utilitzar camps traduïbles, com ara el nom del producte o el nom del país, en qualsevol idioma.
Per defecte, la interfície XML crearà els camps traduïbles en l’idioma de l’usuari que executa l’informe, però si, quan s’afegeix el camp a iReport, se li assigna el tipus java.lang.Object en lloc de java.lang.String, es pot utilitzar la sintaxi següent a l’informe:
$F{product_name}.get( "ca_ES" )
A més, si l’informe és, per exemple, una factura, tindrà una relació amb el tercer. En aquest cas es pot utilitzar:
$F{product_name}.get( $F{partner_language} )
Si la traducció no està disponible per a aquell idioma, s’utilitzarà la traducció per defecte.
Però no ens vam aturar aquí amb les millores de localització i vam decidir ampliar les funcionalitats de localització de JasperReports.
Dit senzillament, el mecanisme de traducció dels informes Jasper és deficient. Se suposa que cal utilitzar un paquet Java (fitxer .properties) per idioma i fer servir $R{key} a les expressions, i evidentment no admet funcionalitats disponibles en qualsevol sistema de traducció modern, com ara els paràmetres i les formes plurals.
El funcionament del nostre mecanisme per al dissenyador d’informes és força senzill: allà on calgui traduir alguna cosa es pot utilitzar:
tr("This is the text I want to translate")
O bé:
tr("{0} out of {1} think this translation system is great!", $F{positive},$F{total})
També es poden utilitzar formes plurals:
trn("One person", "{0} people", $F{people})
De fet, s’han implementat gairebé totes les funcions de java gettext. Però això no era suficient, i per a totes també n’hem implementat una versió amb la configuració regional parametrizable. Per tant, es pot utilitzar:
tr( new Locale("ca", "ES"), "This text will be translated into Catalan even if the default report locale is in german!")
Quan vam aconseguir que això funcionés, necessitàvem una manera d’extreure aquests textos i ho vam fer molt senzill. Al directori jasper_reports/java hi ha un parell d’scripts:
jrxml2pot: extreu els textos de l’informe a un fitxer.pot, que es pot traduir fàcilment amb qualsevol eina estàndard o fins i tot amb Launchpad.po2properties: converteix el fitxer PO traduït en un fitxer.properties.
El directori de l’informe hauria d’acabar contenint els fitxers següents:
text
superreport.jrxml
superreport_ca_ES.properties
superreport_de_DE.properties
...
Si una traducció no està disponible, s’imprimirà el text original.
Tot això és molt fàcil de fer i, el que és més important, es pot integrar als vostres mòduls i traduir mitjançant Launchpad. L’inconvenient d’aquest mecanisme és que, a causa de la manca d’infraestructura de JasperReports per fer aquest tipus de tasques, vam haver de tornar a implementar el GroovyCompiler, i va néixer I18nGroovyCompiler. Això significa bàsicament que:
- Cal utilitzar Groovy com a llenguatge de l’informe.
- No es pot previsualitzar l’informe dins d’iReport.
Actualització: proves recents han demostrat que alguns informes triguen menys de la meitat del temps que trigaven amb el dorsal XML; per tant, segons l’informe, els guanys de rendiment són realment importants.
Preguntes freqüents
Quines millores de rendiment incorpora jasper_reports NG?
Inicia automàticament un procés Java amb el primer informe per evitar reiniciar la màquina virtual cada vegada. Els informes que utilitzen la interfície XML també poden accelerar-se fins a un 10 % amb fitxers CSV en lloc d’XML.
Com es mostren els camps traduïbles en els informes?
Per defecte, es generen en l’idioma de l’usuari que executa l’informe. Si el camp és un java.lang.Object, es pot demanar una localització concreta, com ca_ES, o utilitzar l’idioma del tercer.
Quina sintaxi permet traduir textos amb paràmetres?
La funció tr() permet traduir un text i incorporar-hi paràmetres; trn() permet definir formes singular i plural segons una quantitat.
Quines limitacions té el compilador I18nGroovyCompiler?
Cal utilitzar Groovy com a llenguatge de l’informe i no es pot previsualitzar l’informe dins d’iReport.
Articles relacionats
Tryton
Tryton, ara encara més equipat
A la Tryton Unconference 2019 es van presentar Shine, Papyrus i Printer, tres eines desenvolupades per ampliar les possibilitats de Tryton. Shine integra el treball amb dades, càlculs, gràfics i informes dins l’entorn de gestió, mentre que Papyrus i Printer automatitzen la inspecció i la incorporació d’informació de factures i albarans.
Desenvolupador
Python i Tryton
Python has grown rapidly because it is simple, open source, compatible with other languages, and highly modular. Tryton has been built on Python since its creation in 2008, combining both technologies to provide a robust, adaptable ERP with strong technical capabilities.
Tryton
Tryton, the basics
Tryton és un ERP de programari lliure, robust, transparent, flexible i obert. El vídeo de les Jornades Tryton 2018 ofereix una panoràmica del seu funcionament, dels seus avantatges i també dels seus punts febles.