Altova MobileTogether Designer

Subpágina: sumas decimales en XPath

Inicio Anterior Inicio Siguiente

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.

MTDSPVOrdersTotal

 

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.

 

 

© 2017-2023 Altova GmbH