2011-01-13 8 views
13

Je dois montrer des colonnes: - envoyer - recevoir - annuléif-else-if-else dans l'expression textfield

Dans une colonne de rapport en cochant une valeur de DB qui est "Statut". Donc si Status est égal à 1 alors envoyer, = 2 recevoir, = 3 annulé.

L'expression textfield dans le rapport jasper (? A: b) ne peut prendre qu'une seule condition, comment puis-je donner plusieurs conditions? quelque chose comme si-autre échelle?

Répondre

23

Vous pouvez utiliser une instruction ternaire imbriquée pour y parvenir, mais c'est compliqué.

Par exemple:

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

Je l'ai aussi fait plusieurs fois, et ça peut aller jusqu'à trois conditions ... mais qui pourrait le décoder si vous écrivez 5 conditions ou plus? – davorp

+0

merci, moi aussi fait cela .. mais comme @davorp a dit .. 3 est max. – cherit

+0

Cette réponse donne une odeur de code à coup sûr. @Sean a raison: Faites n'importe quelle logique dans votre bean, en passant le résultat au rapport. – inanutshellus

4

pour que le champ d'état un paramètre qui est passé de votre haricot. De cette façon, vous pouvez effectuer le traitement dont vous avez besoin dans votre bean, affecter le résultat à la variable de paramètre et le transmettre dans votre rapport.

+0

merci .. le réglage dans le haricot pourrait être une solution viable plutôt que de donner une expression dans le rapport lui-même. – cherit

7

vous pouvez utiliser le remplacer() méthode, mais vous devez changer votre classe de champ à chaîne si ce n'est pas, EX:

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

Ma méthode préférée est de créer un paramètre avec les substitutions dans la forme d'un HashMap, quand vous avez un grand groupe de sous-stations ou si elles peuvent changer.

Vous pouvez passer les substitutions lors de l'exécution ou définir une valeur par défaut. L'avantage étant que vous pouvez mettre à jour la carte sans recompiler votre rapport.

Par exemple, si vous deviez avoir un paramètre appelé « risk_types » (en utilisant la langue par défaut groovy) vous souhaitez définir la valeur par défaut de paramètre à quelque chose comme

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

Dans votre code, vous devriez que votre champ texte expression (où risk_type est le champ de recherche de la base de données):

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

pour les articles manquants sur la carte, vous obtiendriez une valeur nulle, je peux prolonger l'expression du champ de texte à:

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

Boolean.valueOf(!($P{accWise}.equals("AC") && $F{RQAC_ACCREJ}.equals("R"))) est utile pour donner plusieurs conditions dans les propriétés de transport.