Altova MapForce 2023 Enterprise Edition

Este ejemplo explica cómo filtrar nodos basándose en una condición true/false. Para conseguirlo se utiliza un componente Filtro: nodos/filas ( mff_ic_insert_filter ). La técnica que se utiliza en este ejemplo funciona igual para componentes XML y otros tipos como CSV o texto. A la hora de trabajar con bases de datos, sin embargo, se recomienda el uso de componentes WHERE/ORDER de SQL, que permiten un mayor rendimiento (véase Componente WHERE / ORDER de SQL).

 

La asignación de este ejemplo es <Documentos>\Altova\MapForce2023\MapForceExamples\MarketingExpenses.mfd.

mff_map_MarketingExpenses

Como puede verse en la imagen, la asignación lee datos de un XML de origen que contiene un informe de gastos ("ExpReport") y escribe datos en un XML de destino ("MarketingExpenses"). Entre el componente de origen y de destino existen varios componentes más. El más relevante en este ejemplo es el componente de filtrado expense-item ( ic-component_filter ).

 

El objetivo de la asignación es filtrar los gastos que pertenecen al departamento de Marketing. Para conseguirlo se añadió un componente de filtrado a la asignación. (Para añadir un filtro haga clic en el menú Insertar y elija el comando Filtro: nodos/filas.)

 

Para identificar qué gastos pertenecen al departamento de Marketing, la asignación busca el valor del atributo "expto" del XML de origen. Este atributo tiene el valor "Marketing" si el gasto pertenece a dicho departamento. Por ejemplo, en el siguiente fragmento de código, puede verse que el primer gasto y el tercero pertenecen a Marketing, el segundo a Development (desarrollo) y el cuarto a Sales (ventas):

 

...  

  <expense-item type="Meal" expto="Marketing">
    <Date>2003-01-01</Date>
    <expense>122.11</expense>
  </expense-item>
  <expense-item type="Lodging" expto="Development">
    <Date>2003-01-02</Date>
    <expense>122.12</expense>
  </expense-item>
  <expense-item type="Lodging" expto="Marketing">
    <Date>2003-01-02</Date>
    <expense>299.45</expense>
  </expense-item>
  <expense-item type="Entertainment" expto="Sales">
    <Date>2003-01-02</Date>
    <expense>13.22</expense>
  </expense-item>

...

XML de entrada antes de ejecutarse la asignación

En el área de asignación, la entrada node/row del filtro está conectado con el nodo expense-item del componente de origen. Esto permite al filtro obtener la lista de nodos que debe procesar.

 

Para agregar la condición en la que se debe basar el filtrado, se añadió la función equal de la biblioteca core de MapForce (véase Funciones básicas). La función equal compara el valor del atributo "type" con una constante cuyo valor es "Marketing". (Para agregar una constante haga clic en el menú Insertar y elija el comando Constante.)

 

Como nuestro objetivo es filtrar los elementos que cumplen esta condición, conectamos solamente la salida on-true del filtro con el componente de destino.

 

Cuando consultamos la vista previa del resultado de la asignación (en el panel Resultados), MapForce evalúa la condición conectada a la entrada bool del filtro en cada nodo expense-item. Si la condición se cumple (es true), el nodo expense-item se pasa al destino. De lo contrario, se pasa por alto. Como resultado se obtienen los gastos que cumplen los criterios:

 

...  

  <expense-item>
    <type>Meal</type>
    <Date>2003-01-01</Date>
    <expense>122.11</expense>
  </expense-item>
  <expense-item>
    <type>Lodging</type>
    <Date>2003-01-02</Date>
    <expense>299.45</expense>
  </expense-item>

...

XML de salida después de ejecutarse la asignación

© 2017-2023 Altova GmbH