Sous-page : Sommes décimales dans XPath
Pour compléter le design, nous allons ajouter un libellé qui affiche la somme totale des commandes affichées. Procédez comme suit :
1.Glissez une commande Libellé depuis le panneau Commandes et déposez-la en-dessous de la table Orders (voir capture d'écran ci-dessous).
2.Dans le panneau Styles & Propriétés, cliquez sur l'icône XPath de la propriété Text de la commande.
3.Dans le dialogue Éditer l'expression XPath/XQuery qui apparaît, saisissez l'expression XPath pour calculer les sommes totales (l'expression est donnée ci-dessous), et clique--z sur OK.
L'expression XPath pour calculer la somme totale
Nous devons calculer les totaux dans deux événements : (i) pour les commandes du client sélectionné, et (ii) pour toutes les commandes. Cela peut être réalisé avec l'expression XPath suivante :
if (\$XML1/Root/CustomerCode!='All')
then concat('Total: ', xs:decimal(sum (\$ORDERS//Order[CustomerCode=\$XML1/Root/CustomerCode]/OrderAmount)))
else concat('Total: ', xs:decimal(sum (\$ORDERS//OrderAmount)))
Cette expression XPath fonctionne comme suit :
1.La clause if de l'expression teste si l'élément \$XML1/Root/CustomerCode contient le string All.
2.Si l'élément \$XML1/Root/CustomerCode ne contient pas le string All, l'élément OrderAmount de tous les éléments Order dont le contenu d'élément CustomerCode est égal au contenu de l'élément \$XML1/Root/CustomerCode sera sélectionné. Il s'agira des sommes les éléments Order du client qui a été sélectionné par l'utilisateur final. Ne pas oublier que le CustomerCode du client a été stocké dans la source de page \$XML1 (voir Page supérieure : Groupe d'action, Aller à la sous-page).
3.Si l'élément \$XML1/Root/CustomerCode contient le string All, tous les éléments OrderAmount seront sélectionnés.
Les éléments OrderAmount sélectionnés sont totalisés en utilisant la fonction XPath sum(). Puisque la fonction sum() utilise le type xs:double et retourne un nombre xs:double, la somme contiendra plus que les deux chiffres après la virgule nécessaires pour les devises. C'est pourquoi nous utilisons le convertisseur de type xs:decimal pour arrondir le xs:double à un nombre à deux décimales.