La valeur par défaut pour les champs null dans un Rapport Jasper
Fond
Un jeu de résultats a beaucoup de Double
champs de valeur (avec des motifs comme "###0.000"
). Certaines valeurs peuvent être null
.
Problème
Je veux remplacer null
valeurs avec "N/A"
, qui est un String
et ne peut pas imprimer sur un Double terrain. L'impression "0.00"
pour null
valeurs est inacceptable.
À l'aide d'un PrintWhenExpression valeur de ($F{value} != null) ? $F{value} : "N/A"
ne fonctionne pas; il n'est pas possible d'utiliser les modèles de cette façon.
Idée
Ajouter des champs cachés que d'écrire "N/A". Ces champs seront imprimées uniquement si la valeur est null
.
Question
Est-il une meilleure solution, et si oui, quel est-il?
Merci.
Vous devez vous connecter pour publier un commentaire.
Solution n ° 1
Votre solution:
doubleField
) pour la valeur de la colonne.$F{doubleField} == null
.Solution n ° 2
Le problème est, comme vous l'avez souligné, que d'un lit Double et une Corde sont deux types de données différents. Vous pouvez affecter une variable de Chaîne de la valeur du Double de l'aide d'une expression. Ensuite, utilisez la variable Chaîne de caractères que le champ. L'expression peut ressembler à:
(Note: Ma préférence est d'utiliser
==
au lieu de!=
. Penser positif.)Solution n ° 3
Modifier l'instruction SQL de pré-formater le Double comme une chaîne de texte, et d'utiliser le "N/A" dans la chaîne (à l'aide d'un
CASE
ouDECODE
énoncé dans la requête).Éviter cette solution, bien que, comme il n'est pas facile à gérer.
Recommandation
Ne pas coder en dur le "N/A" string tout au long du rapport(s); mettre le "N/A" du texte dans une constante, ou d'un paramètre avec une valeur par défaut de "N/A".
Vous pouvez essayer quelque chose comme cela dans votre domaine d'expression:
Ou, si vous ne voulez pas que votre texte statique à être visible lorsque le champ est null, essayez de mettre
$F{field}!=null
dans votrePrintWhenExpression
.