Altova MapForce 2023 Enterprise Edition

Este ejemplo explica cómo importar un módulo de biblioteca XQuery de ejemplo en MapForce y llamar a sus funciones desde una asignación. Para este ejemplo importaremos un módulo que consiste en una única función que calcula un impuesto del 20% con importes decimales. En un escenario de producción, un módulo XQuery podría contener varias funciones.

 

Todas las funciones declaradas en el módulo XQuery deben devolver tipos atómicos y sus parámetros también deben ser tipos de datos atómicos. De lo contrario el módulo no se puede importar a MapForce.

 

Puede encontrar el archivo del módulo XQuery de ejemplo en la siguiente ruta relativa a la carpeta personal "Documentos" del equipo en el que está instalado MapForce: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\module.xq.

 

xquery version "1.0";
 
module namespace demo="https://www.altova.com/mapforce/demo";
 
declare function demo:calculatetax(\$val as xs:decimal) as xs:decimal {  
  \$val*0.2
};

module.xq

Después de importar el archivo del módulo XQuery en MapForce ya puede llamar a la función demo:calculatetax desde una asignación. Observe que estamos calculando el importe con la ayuda de una función XQuery para este ejemplo, pero se puede obtener el mismo resultado usando las funciones integradas de MapForce.

 

Existe una asignación que llama a la función demo:calculatetax en la siguiente ruta: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\CalculateTax_XQuery.mfd. La primera vez que abra esta asignación MapForce emitirá un aviso indicando que la asignación contiene uno o más componentes que no están disponibles en XQuery. Esta advertencia es normal y ocurre porque la asignación contiene referencias a funciones de una biblioteca XQuery personal que aún no se ha importado. Para eliminar la advertencia y ejecutar la asignación debe importar el módulo XQuery que falta en MapForce como se explica a continuación.
 

Importar el módulo XQuery en MapForce:

1.Vaya hasta el final de la ventana Bibliotecas y haga clic en Agregar o quitar bibliotecas. Se abre el cuadro de diálogo "Opciones".

2.Haga clic en Add (Agregar) y navegue hasta el archivo <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\module.xq.

3.Haga clic en Aceptar para cerrar el cuadro de diálogo. Aparece un cuadro de mensaje que confirma que se ha agregado una biblioteca nueva.

mf_xq_01

Ahora la biblioteca que ha agregado y la función demo:calculatetax son visibles en la ventana Bibliotecas.

mf_xq_02

Ahora puede ejecutar la asignación sin que aparezcan advertencias. La función demo:calculatetax de la imagen siguiente proviene del módulo XQuery que ha importado y se puede añadir a la asignación como cualquier otra función (véase Agregar una función).

mf_xq_03

CalculateTax_XQuery.mfd

 

La asignación explicada

La asignación de la imagen anterior, CalculateTax_XQuery.mfd, toma como entrada un archivo XML que almacena artículos. Cada artículo tiene un único precio que se expresa con un valor decimal, por ejemplo:

 

<Articles>
  <Article>
    <Number>1</Number>
    <Name>T-Shirt</Name>
    <SinglePrice>25</SinglePrice>
  </Article>
  <Article>
    <Number>2</Number>
    <Name>Socks</Name>
    <SinglePrice>2.30</SinglePrice>
  </Article>
  <Article>
    <Number>3</Number>
    <Name>Pants</Name>
    <SinglePrice>34</SinglePrice>
  </Article>
  <Article>
    <Number>4</Number>
    <Name>Jacket</Name>
    <SinglePrice>57.50</SinglePrice>
  </Article>
</Articles>

Articles.xml

La asignación produce un archivo XML que obedece al mismo esquema que el archivo XML de origen. En consecuencia, tanto el componente de entrada como el de salida tienen la misma estructura en la asignación. Tal y como sugieren las conexiones de la asignación, prácticamente todos los elementos están asignados de forma directa del componente de origen al de salida; por ejemplo, por cada elemento Article en el componente de origen habrá otro elemento Article en el componente de destino. Los valores de todos los elementos se copian literalmente del XML de origen, excepto SinglePrice. El valor de SinglePrice se calcula con ayuda de dos funciones:

 

La función de ejemplo XQuery demo:calculatetax calcula el importe del impuesto tomando como entrada el precio original, SinglePrice.

La función integrada de MapForce add añade el importe del impuesto al importe del precio original SinglePrice y devuelve el importe final.

 

Conviene tener en cuenta que el tipo de datos del elemento SinglePrice es xs:decimal, lo que corresponde al tipo de parámetro de entrada y al tipo de retorno de la función XQuery.

 

A continuación se muestra el resultado producido por la asignación al hacer clic en la pestaña Resultados. Observe que los precios son un 20% más caros que los del XML de origen.

mf_xq_04

© 2017-2023 Altova GmbH