Como simular una estructura if else con JasperReports e iReports


JasperReports es una librería de java que permite generar informes a partir de plantillas xml.
Como está pensado para presentar datos exclusivamente estructuras de programación del estilo if-else no se pueden usar. Sin embargo en ocasiones puede ser necesario y es posible simularlo como se muestra a continuación.

En este caso nuestro modelo de datos tiene un estado para las facturas que es de tipo numérico. Sin embargo a los usuarios se les debe mostrar un texto que tenga más significado para ellos de acuerdo con su modelo de negocio. Para hacer esta traducción se debe modificar la plantilla .jrxml de la siguiente manera :

<!---------------------------------------- plantilla.jrxml ------------------------------------------>

<textFieldExpression   class="java.lang.String">

<![CDATA[($F{[fact.model]estadoFactura}.intValue() == -1  ? "Sin registrar" :
  ($F{[fact.model]estadoFactura}.intValue()  == -2 ? "Sin pedido" :
    ( $F{[fact.model]estadoFactura}.intValue()  == -4 ? "Sin recepcion" :
      ( $F{[fact.model]estadoFactura}.intValue()  == 0 ? "Registrada" :
        ( $F{[fact.model]estadoFactura}.intValue()  == 1 ? "Pdte. aprobar" :
          ( $F{[fact.model]estadoFactura}.intValue()  == 2 ? "Aprobada" :
            ( $F{[fact.model]estadoFactura}.intValue()  == 3 ? "Pdte. revisar" :
              ( $F{[fact.model]estadoFactura}.intValue()  == 4 ? "Rechazada" :
                ""
              )
            )
           )
        )
      )
    )
  )
)
]]>

</textFieldExpression>

<!---------------------------------------- plantilla.jrxml ------------------------------------------>

Como trabajar directamente con las plantillas xml puede ser muy engorroso existe un editor gráfico llamado iReports que facilita la tarea. Si usamos iReports para reproducir el comportamiento deseado debemos abrir el editor de expresiones …

ireports_ifelse1

e introducir el if-else

ireports_ifelse21