2011-11-08 6 views
0

Je suis un débutant avec Birt (en fait c'est mon premier jour avec elle) et ma tâche est de créer un rapport Birt qui ressemble exactement à celui fait dans Flash/Flex ... Ce rapport est à la recherche vraiment bien. Le problème est: Im ma solution Flex J'ai un champ d'un DataGrid qui se compose d'une étiquette suivie d'une sortie numérique, si la valeur numérique est 0 ou plus.Champs composites dans Birt

Basé sur deux valeurs d'une rangée de recordsets j'obtiens une valeur internationalisée en appliquant des fonctionnalités de mappage de Birt (cela fonctionne déjà très bien). La chaîne résultante doit alors être ajoutée avec "({value})" si la valeur est supérieure ou égale à 0.

Lorsque j'utilise le concepteur, je ne peux placer qu'un second champ dans sa propre cellule de tableau ou ligne de table, mais je semble être incapable de sortir les deux champs dans une cellule de tableau.

Ce serait génial si quelqu'un pouvait me guider à travers cela.

Chris

Répondre

2

Vous pouvez construire chaîne entière dans texte dynamique expession JavaScript.

L'utilisation de i18n dans Javascript est brièvement décrite dans BIRT FAQ. La seule question intéressante pourrait être How can I localize strings in JavaScript - cette expression donne le texte localisé:

reportContext.getMessage("companyNameKey", reportContext.getLocale()) 

ligne de données sont stockées dans le tableau row. Tous les champs disponibles peuvent être trouvés dans un générateur d'expression. Comme vous l'avez trouvé et champ double-clic désiré, il apparaît l'expression comme ceci:

row["FOO_NUMBER"].value 

Mettre tous ensemble:

reportContext.getMessage("Foo number:", reportContext.getLocale()) + 
    (row["FOO_NUMBER"].value > 0) ? ("("+row["FOO_NUMBER"].value+")") : ("") 
+0

Salut ... merci pour cela. Il a fait l'affaire :-) ... Comme mon "FOO_NUMBER" est de type Float, l'ajout de la valeur entraîne la sortie de "undefined". Le laisser de côté rend le dynamicText fonctionne comme prévu. Il ne reste plus qu'à le résoudre pour que le flottant soit sorti en fonction des rapports régionaux (Actuellement le float est sorti au format "1.4", ce qui est correct aux Etats-Unis, mais en Allemagne il devrait être "1,4") –

1

Merci à jinowolskis le message ... je voulais juste ajouter la solution complète que si Quelqu'un rencontre le même problème :-)

importPackage(Packages.java.text); 
var myKey = "" + row["vulnerabilityClass"] + "." + row["result"]; 
if(row["cvssScore"] >= 0) { 
    var nf = NumberFormat.getNumberInstance(reportContext.getLocale()); 
    nf.setMinimumFractionDigits(1); 
    nf.setMaximumFractionDigits(1); 
    reportContext.getMessage(myKey, reportContext.getLocale()) + " (" + nf.format(row["cvssScore"]) + ")"; 
} else { 
    reportContext.getMessage(myKey, reportContext.getLocale()); 
}