Subpágina: sumas decimales en XPath
Para completar el diseño, añadiremos una etiqueta que muestra la suma total de pedidos mostrados. Hay que realizar los siguientes pasos:
1.Arrastre un control "Etiqueta" desde el Panel "Controles" y suéltela bajo la tabla "Orders" (consulte la captura de pantalla siguiente).
2.Haga clic sobre el icono XPath de la propiedad Text del control del Panel "Propiedades & Estilos".
3.Introduzca la expresión XPath para calcular la suma total en el cuadro de diálogo "Editar la expresión XPath/XQuery" (la expresión se muestra a continuación) .Haga clic en Aceptar.
La expresión XPath para calcular la suma total
Necesitamos calcular la suma total en dos eventos: (i) para los pedidos del consumidor seleccionado y (ii) para todos los pedidos. Para ellos utilizaremos la siguiente expresión XPath:
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)))
La expresión XPath funciona de la siguiente forma:
1.La claúsula if de la expresión prueba si el elementot $XML1/Root/CustomerCode contiene la cadena All.
2.Si el elemento $XML1/Root/CustomerCode no contiene la cadena All, entonces se seleccionará el elemento OrderAmount de todos los elementos Order cuyo contenido de su elemento CustomerCode sea igual al contenido del elemento $XML1/Root/CustomerCode. eSto será la suma de todos los elementos Order del consumidor que ha seleccionado el usuario final. Recuerde que el CustomerCode está almacenado en la fuente de datos $XML1 (consulte Página del nivel superior: Grupo de acción, Ir a la subpágina).
3.Si el elemento $XML1/Root/CustomerCode contiene la cadena All, entonces se seleccionarán todos los elementos OrderAmount
Los elementos OrderAmount seleccionados se suman usando la función sum() de XPath. Debido a que la función sum() utiliza el tipo xs:double y devuelve un número xs:double, la cantidad tendrá más de los dos decimales que requerimos en una moneda. Por lo tanto usaremos el conversor de tipo xs:decimal para redondear xs:double a un número con dos decimales.