Altova MapForce 2024 Enterprise Edition

Retourne la position d’un item dans le cadre de la séquence des items actuellement en cours de traitement. Cela peut être utilisé, par exemple pour numéroter automatiquement des items séquentiellement.

mf-func-position

 

Langages

Built-in, C++, C#, Java, XQuery, XSLT 1.0, XSLT 2.0, XSLT 3.0.

 

Paramètres

Nom

Description

node

Cette entrée doit recevoir une connexion depuis un item de mappage qui fournit une séquence de zéros ou plus de valeurs. Par exemple, la connexion peut provenir d’un item XML de source , un champ CSV, un enregistrement de base de données, etc.

 

Exemple

Le mappage suivant illustre l’utlisation de la fonction position pour générer des valeurs d’identification uniques dans des données générées par le mappage. Ce mappage est accompagné par un fichier de design de mappage qui est disponible sous le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\ContactsFromBranchOffices.mfd.

 

mf_map_ContactsFromBranchOffices

ContactsFromBranchOffices.mfd

Dans le mappage ci-dessus, le fichier XML de source contient trois filiales. Une filiale peut contenir un nombre arbitraire d’items enfant Contact. Les objectifs du mappage sont les suivants :

 

Extraire tous les items Contact du fichier XML de source et les écrire dans le fichier XML de cible.

Chaque contact doit être attribué à un numéro d’identification unique (l’item ID dans le XML de cible).

L’ID de chaque contact doit prendre la forme de CXX-YYYYY, où X identifie le numéro de bureau et Y identifie le numéro de contact. Si le numéro du bureau a moins de deux caractères, il faut rajouter des zéros à gauche. De même, si le numéro de contact a moins de cinq caractères, il faut rajouter des zéros à gauche. Par conséquent, un numéro d’identification valide du premier contact du premier bureau devrait ressembler à l’exemple suivant : C01-00001.

 

Pour obtenir les objectifs de mappage, plusieurs fonctions MapForce ont été utilisées, y compris la fonction position. La fonction supérieure position obtient la position de chaque bureau. La fonction inférieure obtient la position de chaque contact, dans le contexte de chaque bureau.

 

Lorsque vous utilisez la fonction position, il est important de considérer le contexte de mappage actuel. Plus spécifiquement, lorsque le mappage est exécuté, le contexte de mappage initial est établi depuis l’item root du composant cible vers l’item de source qui y est connecté (même indirectement via des fonctions). Dans cet exemple, la fonction supérieure position traite la séquence de tous les bureaux et elle génère initialement la valeur valeur 1, correspondant au premier bureau dans la séquence. La fonction inférieure position génère des nombres séquentiels correspondant à la position du contact dans le contexte de ce bureau (1, 2, 3, etc.). Veuillez noter que cette séquence "interne" sera réinitialisée (et donc recommencera avec le numéro 1) lorsque le bureau suivant est traité. Les deux fonctions pad-string-left appliquent le remplissage aux numéros générés, conformément aux exigences déclarées précédemment. La fonction concat fonctionne dans le contexte de chaque contact (en raison de la connexion parent provenant de la source vers la cible Contact). Elle rejoint toutes les valeurs calculées et retourne le numéro d’identification unique de chaque contact.

 

La sortie générée depuis le mappage ci-dessus est affiché ci-dessous (veuillez noter que certains des enregistrements ont été supprimés pour la lecture) :

 

<Contacts>
  <Contact>
    <ID>C01-00001</ID>
    <First>Vernon</First>
    <Last>Callaby</Last>
  </Contact>
  <Contact>
    <ID>C01-00002</ID>
    <First>Frank</First>
    <Last>Further</Last>
  </Contact>
  <!-- ... -->
  <Contact>
    <ID>C02-00001</ID>
    <First>Steve</First>
    <Last>Meier</Last>
  </Contact>
  <Contact>
    <ID>C02-00002</ID>
    <First>Theo</First>
    <Last>Bone</Last>
  </Contact>
  <!-- ... -->
</Contacts>

 

Il peut aussi exister des cas où vous souhaitez obtenir la position d’items résultant après l’application d’un filtre. Veuillez noter que le composant de filtre n’est pas une fonction de séquence et qu’il ne peut pas être utilisé directement en conjonction avec la fonction de position pour trouver la position des items filtrés. Indirectement, cela est possible en ajoutant un composant de variable dans le mappage. Par exemple, le mappage ci-dessous est une version simplifiée de la version précédente. Son fichier de design de mappage est disponible sous le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\PositionInFilteredSequence.mfd.

mf_map_PositionInFilteredSequence

Le résultat des variables dans MapForce est toujours des séquences. C’est pourquoi, dans le mappage ci-dessus, la fonction position itère à travers la séquence créée par la variable et retourne la position de chaque item dans cette séquence. Ce mapping est discuté plus en détail dans Exemple : Filtrer et Numéroter des nœuds.

© 2018-2024 Altova GmbH