2011-01-13 11 views
13

tengo que mostrar columnas: - enviar - recibir - canceladoif-else-if-else en el campo de texto la expresión

En una columna de informe marcando un valor de DB que es "Estado". Entonces, si Status es igual a 1, entonces enviar, = 2 recibir, = 3 cancelado.

La expresión del campo de texto en el informe de jaspe (? A: b) solo puede tomar una condición, ¿cómo doy múltiples condiciones? algo así como escalera if-else?

Respuesta

23

Puede usar una declaración ternaria anidada para lograr esto, pero está desordenado.

Por ejemplo:

(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled"); 
+1

También hice esto algunas veces, y está bien para un máximo de tres condiciones ... ¿pero quién lo decodificará si escribe 5 o más condiciones? – davorp

+0

gracias, yo también hice esto ... pero como dijo @davorp .. 3 es max. – cherit

+0

Esta respuesta da como resultado un olor codificado seguro. @Sean tiene razón: haga cualquier lógica en su bean, pasando el resultado al informe. – inanutshellus

4

Hacer el campo de estado de un parámetro que se pasa desde el bean. De esta forma, puede hacer cualquier procesamiento que necesite en su bean, asignar el resultado a la variable de parámetro y pasarlo a su informe.

+0

gracias ... configurar en el frijol podría ser una solución viable en lugar de dar expresión en el informe en sí. – cherit

7

puede utilizar el método replace(), pero hay que cambiar la clase de su campo de cadena si no lo es, EX:

$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk") 
4

Mi método preferido es el de crear un parámetro con las sustituciones en la forma de un HashMap, cuando tiene un gran grupo de subestaciones o si pueden cambiar.

Puede pasar las sustituciones en el tiempo de ejecución o establecer un valor predeterminado. El beneficio es que puede actualizar el mapa sin volver a compilar su informe.

Por ejemplo, si usted tuviera un parámetro denominado "risk_types" (usando el idioma predeterminado como maravilloso) lo haces con el valor por defecto del parámetro a algo así como

[1: "HIGH RISK", 2: "LOW RISK"] 

En su código, que había tener su expresión como campo de texto (donde risk_type es el campo de búsqueda de la base de datos):

$P{risk_types}.get($F{risk_type}) 

para los elementos que faltan en el mapa, se obtendría un valor nulo, que ampliar el campo de texto la expresión a ser:

$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED" 
1

Boolean.valueOf(!($P{accWise}.equals("AC") && $F{RQAC_ACCREJ}.equals("R"))) es útil para dar varias condiciones en las propiedades de ireport.

Cuestiones relacionadas