Il y a des indices de réponse à cette question ici et là sur ce site, mais je pose une question légèrement différente. Où Crystal Reports documente-t-il que cette syntaxe ne fonctionne pas? Où?Formule Crystal Reports: IsNull + Iif
Trim({PatientProfile.First}) + " "
+ Trim(Iif(
IsNull({PatientProfile.Middle})
, Trim({PatientProfile.Middle}) + " "
, " "
)
)
+ Trim({PatientProfile.Last})
Je sais que la solution est
If IsNull({PatientProfile.Middle}) Then
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Last})
Else
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Middle})
+ " " + Trim({PatientProfile.Last})
mais comment sommes-nous censés comprendre que nous ne pouvons pas utiliser la première version?
La documentation IsNull dit
- Évalue le champ spécifié dans l'enregistrement en cours et retourne TRUE si le champ contient une valeur null
et Iif donne
- [retour ] truePart si l'expression est True et falsePart si l'expression est False. Le type de la valeur renvoyée est le même que le type de truePart et falsePart.
Je suppose que si vous regardez à cette ligne de « type de la valeur de retour » vous pouvez l'obtenir, mais ...
Je n'ai pas CRXI aujourd'hui à portée de main, mais ce qui ne fonctionne pas sur le premier? Est-ce que l'espacement est juste incorrect (ce qui est une erreur logique dans le code - vous avez un Trim() supplémentaire) ou échoue-t-il d'une autre manière? – Stobor
Pour les enregistrements où .Middle est NULL, CR ne peut pas évaluer la valeur de chaîne dans Trim (.Middle), et décide que la valeur de Iif est NULL, même si j'ai ce test explicite. – SarekOfVulcan