web-dev-qa-db-fra.com

if-else-if-else dans l'expression de champ de texte

Je dois montrer les colonnes: - envoyer - recevoir - annulé

Dans une colonne de rapport en vérifiant une valeur de DB qui est "Status". Donc, si le statut est égal à 1, envoyer, = 2 recevoir, = 3 annulé.

L'expression de champ de texte dans le rapport Jasper (? A: b) ne peut prendre qu'une seule condition, comment puis-je donner plusieurs conditions? quelque chose comme une échelle if-else?

14
cherit

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

Par exemple:

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

vous pouvez utiliser la méthode replace (), mais vous devez changer la classe de votre champ en String sinon, EX:

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

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

Vous pouvez soit passer les substitutions lors de l'exécution, soit 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 nommé "risk_types" (en utilisant la langue par défaut comme groovy), vous définiriez la valeur par défaut du paramètre à quelque chose comme

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

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

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

Pour les éléments manquants dans la carte, vous obtiendrez une valeur nulle, j'étends l'expression du champ de texte comme suit:

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

Faites du champ d'état un paramètre transmis à partir de votre bean. 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.

4
Sean

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

1
Divya