Altova MapForce 2024 Professional Edition

Cet exemple vous montre comment filtrer des nœuds basés sur une condition true/false. Un composant Filtre : Nœuds/Lignes ( mff_ic_insert_filter ) est utilisé pour atteindre cet objectif. La technique illustrée dans cet exemple fonctionne de la même manière non seulement pour XML, mais aussi pour d'autres types de composant, comme CSV ou texte. Dans le cas des bases de données, bien que vous pouvez utiliser un filtre, il est recommandé d'utiliser à la place un composant SQL WHERE/ORDER, pour une meilleure performance (voir Composant SQL WHERE / ORDER).

 

Le mappage décrit dans cet exemple est disponible sous le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\MarketingExpenses.mfd.

mff_map_MarketingExpenses

Comme indiqué ci-dessus, le mappage lit des données depuis un XML de source qui contient les notes de frais ("ExpReport") et écrit les données dans un XML cible ("MarketingExpenses"). Il existe plusieurs autres composants entre la cible et la source. Le composant le plus pertinent est le filtre expense-item ( ic-component_filter ), qui représente le sujet de cette rubrique.

 

Le but du mappage est de filtrer uniquement les postes de dépense qui appartiennent au département Marketing. Pour atteindre cet objectif, un composant de filtre a été ajouté au mappage. (Pour ajouter un filtre, cliquez dans le menu Insérer, puis cliquez sur Filtre : Nœuds/Lignes.)

 

Afin d'identifier si chaque poste de dépense doit être attribué à Marketing, ce mappage consulte la valeur de l'attribut "expto" dans la source. Cet attribut a la valeur "Marketing" dès que la dépense est une dépense de marketing. Par exemple, dans la liste de code ci-dessous, le premier et le troisième poste de dépense correspond à Marketing, le deuxième appartient à Development, et le quatrième appartient à Sales :

 

...  

  <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>

...

Entrée XML avant exécution du mappage

Dans la zone de mappage, l'entrée nœud/ligne du filtre est connectée au nœud expense-item dans le composant de source. Cela assure que le composant de filtre obtient la liste des nœuds qu'il doit traiter.

 

Pour ajouter la condition sur la base de laquelle le filtrage doit se produire, nous avons ajouté la fonction equal depuis la bibliothèque principale de MapForce (pour plus d'informations, voir aussi Ajouter une fonction au mappage). La fonction equal compare la valeur de l’attribut expto à une constante qui a la valeur Marketing. (Pour ajouter une constante, cliquez sur le menu Insérer, puis cliquez sur Constante.)

 

Puisque nous souhaitons filtrer uniquement les items qui satisfont à la condition, nous connectons uniquement la sortie on-true du filtre sur le composant de cible.

 

Lorsque vous consultez le résultat de mappage, en cliquant sur l'onglet Sortie, MapForce évalue, pour chaque nœud expense-item, la condition connectée à l'entrée bool du filtre. Lorsque la condition est vraie, le nœud expense-item est passé sur le cible ; sinon, elle sera ignorée. Par conséquent, seuls les items de dépense correspondant aux critères seront affichés dans la sortie :

 

...  

  <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>

...

Sortie XML après exécution du mappage

© 2018-2024 Altova GmbH