Unterseite: Dezimalsummen in XPath
Um das Design fertig zu stellen, wollen wir eine Beschriftung hinzufügen, in der die Gesamtsumme der angezeigten Bestellungen angezeigt wird. Gehen Sie dazu folgendermaßen vor:
1.Ziehen Sie ein Steuerelement "Beschriftung" aus dem Fenster "Steuerelemente" unter die Tabelle Orders (siehe Abbildung unten).
2.Klicken Sie im Fenster "Stile & Eigenschaften" auf das XPath-Symbol der Steuerelementeigenschaft Text.
3.Geben Sie im Dialogfeld "XPath/XQuery-Ausdruck bearbeiten", das nun angezeigt wird, den XPath Ausdruck zur Berechnung der Gesamtsummen ein (Sie finden den Ausdruck weiter unten) und klicken Sie auf OK.
Der XPath-Ausdruck zur Berechnung der Gesamtsumme
Wir müssen die Gesamtsumme für zwei Fälle berechnen: (i) für die Bestellungen des ausgewählten Kunden und (ii) für alle Bestellungen. Verwenden Sie dazu den folgenden XPath-Ausdruck:
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)))
Dieser XPath-Ausdruck funktioniert folgendermaßen:
1.Mit der if-Klausel des Ausdrucks wird überprüft, ob das Element $XML1/Root/CustomerCode den String All enthält.
2.Wenn das Element $XML1/Root/CustomerCode den String All nicht enthält, so werden die OrderAmount-Elemente aller Order-Elemente, deren CustomerCode-Elementinhalt gleich dem Inhalt des Elements $XML1/Root/CustomerCode ist, ausgewählt. Dabei handelt es sich um die Anzahl der Order-Elemente des vom Endbenutzer ausgewählten Kunden. Wie Sie wissen, wurde der Kundencode CustomerCode in der Seitenquelle $XML1 gespeichert (siehe Toplevel-Seite: Aktionsgruppe, Gehe zu Unterseite).
3.Wenn das Element $XML1/Root/CustomerCode den String All enthält, so werden alle OrderAmount-Elemente, ausgewählt.
Die ausgewählten OrderAmount-Elemente werden mit Hilfe der sum()-Funktion von XPath summiert. Da in der sum()-Funktion der Typ xs:double verwendet wird und eine Zahl vom Typ xs:double zurückgegeben wird, hat die Summenzahl mehr als die zwei in einer Währung benötigten Dezimalstellen. Wir runden daher den Typ xs:double mit Hilfe der Typkonvertierung xs:decimal auf eine zweistellige Zahl.