Contexte et ordre de traitement
Le contexte détermine quelles données sources et quels résultats intermédiaires sont disponibles pour le nœud cible actuel et ses descendants.
MapForce établit le contexte actuel en partant du nœud racine cible. C’est là que commence l’exécution du mappage. Après avoir traité le nœud racine cible, MapForce descend dans la hiérarchie cible, en évaluant chaque nœud et ses descendants. Pour chaque nœud cible, MapForce remonte le fil des connexions jusqu’aux composants sources, y compris les composants de traitement intermédiaires tels que les fonctions et les filtres.
Lorsqu’un nœud cible est évalué, MapForce établit un contexte qui hérite des nœuds sources et des résultats intermédiaires disponibles dans le contexte parent. Les nœuds cibles frères sont évalués indépendamment les uns des autres, mais chacun hérite des données sources disponibles dans le contexte parent. Pour plus de détails sur le contexte parent, voir Contexte parent.
Pour plus d’informations sur les règles fondamentales d’exécution des mappages, voir Règles et stratégies de base.
Ordre de traitement dans le cas de cibles multiples
Lorsqu’un mappage comporte plusieurs composants cibles, vous ne pouvez prévisualiser la sortie que d’un seul composant à la fois. Pour ce faire, cliquez sur le bouton
Aperçu du composant cible qui vous intéresse (capture d’écran ci-dessous).
Ordre de traitement dans MapForce Server et dans le code généré
Dans d’autres environnements d’exécution (code généré), les composants cibles sont exécutés séquentiellement, et la sortie de chaque composant est produite.
Par défaut, les composants cibles sont traités de haut en bas et de gauche à droite. Vous pouvez modifier cet ordre en changeant la position des composants cibles dans la fenêtre de mappage.
Mappages enchaînés
Le repositionnement du composant cible intermédiaire ou final d’un mappage enchaîné unique n’a aucun effet sur l’ordre de traitement. Pour plus d’informations sur les mappages enchaînés, voir Tutoriel : Mappage enchaîné.
Exemple
Pour mettre en pratique les principes décrits ci-dessus, nous allons examiner le mappage présenté ci-dessous (MapForceExamples\PersonListByBranchOffice.mfd). L’objectif principal de ce mappage est d’obtenir la liste des employés d’un bureau donné, accompagnée de leurs informations détaillées.

Structures source et cible
Dans notre exemple, le mappage contient un composant XML source et un compostant XML cible. De plus, il existe un composant à entrée simple qui fait également office de source et fournit le nom du bureau dont les employés nous intéressent. Le mappage comprend également divers composants de traitement des données, tels qu'un filtre et certaines fonctions.
<BranchOffices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BranchOffices.xsd"> <Name>Nanonull</Name> <Office> <Name>Nanonull, Inc.</Name> <EMail>office@nanonull.com</EMail> <Fax>+1 (321) 555 5155 - 9</Fax> <Phone>+1 (321) 555 5155</Phone> <Address> <city>Vereno</city> <state>CA</state> <street>119 Oakstreet, Suite 4876</street> <zip>29213</zip> </Address> </Contact> <first>Vernon</first> <last>Callaby</last> </Contact> <Contact>...</Contact> <Contact>...</Contact> <Contact>...</Contact> <...> </ Office> <Office> <Name>Nanonull Partners, Inc.</Name> <EMail>nextoffice@nanonull.com</EMail> <Fax>+1 (927) 555 1845</Fax> <Phone>+1 (927) 555 0094</Phone> <Address> <city>Brenton</city> <state>MA</state> <street>9865 Millenium Center, Suite 456</street> <zip>5985</zip> </Address> </Contact> <first>Steve</first> <last>Meier</last> </Contact> <Contact>...</Contact> <Contact>...</Contact> <...> </ Office> </BranchOffices> |
Contexte et ordre de traitement
Le traitement commence au niveau du nœud racine cible, appelé PersonList. Nous pouvons remonter la connexion via le filtre et la fonction equal jusqu'à l'élément source appelé Office. Au fur et à mesure que MapForce passe du nœud racine à ses descendants, chaque nœud cible est évalué dans le contexte établi par son nœud parent.
Un seul bureau comme contexte pour la cible
Comme la connexion entre l'élément Office et l'élément PersonList passe par un filtre, seules les données qui satisfont à la condition booléenne sont mappées vers la cible. Cette condition n'est satisfaite qu'une seule fois, car il n'existe qu'un seul bureau, appelé Nanonull, Inc., dans le fichier XML source. Par conséquent, la connexion entre l’élément PersonList, passant par le filtre, et l’élément Office définit un seul bureau comme contexte pour l’ensemble du document cible. Cela signifie que toutes les connexions suivantes vers les descendants de l’élément racine n’auront accès qu’aux données du bureau Nanonull, Inc., et que les données de tout autre bureau seront exclues du contexte actuel.
Une personne pour chaque contact
La connexion suivante relie les éléments Contact et Person. Conformément à la règle de mappage principale, cette connexion créera une Person cible pour chaque Contact source. À chaque itération, cette connexion établit le contact actuel pour les connexions vers les enfants de l’élément Person. Par conséquent, les connexions enfant (first vers First, last vers Last) sélectionneront le prénom et le nom de l’élément Contact actuel et les enregistreront dans la cible.
Fonction définie par l’utilisateur
Le mappage inclut également une fonction définie par l’utilisateur dénommée LookupPerson. La fonction définie par l'utilisateur est également exécutée dans le contexte de chaque Person en raison de la connexion parent entre Contact et Person. Chaque fois qu'un nouvel élément Person est créé côté cible, la fonction est appelée pour remplir l'élément Details de l'élément Person.
La fonction prend trois paramètres d'entrée : le nom du service, le prénom et le nom de famille. En interne, la fonction concatène les valeurs reçues en tant qu'arguments et génère une valeur unique.
Pour plus d’information sur la configuration de la fonction LookupPerson, voir Implémentation de la recherche.
Si les parents ne sont pas connectés
Si la connexion entre les éléments Contact et Person n'est pas établie, les éléments first et last du fichier source seront évalués dans le contexte de l'élément Office. Comme il n'y a qu'un seul bureau répondant à la condition de filtrage, le mappage ne créera qu'un seul élément Person cible et le remplira avec tous les éléments first et last de tous les contacts de Nanonull, Inc.
Dans de tels cas, MapForce affiche un avertissement dans la fenêtre Messages (capture d’écran ci-dessous) et suggère de connecter les nœuds parent pour résoudre le problème.

Pour plus d'informations sur le contexte, voir Contexte parent et Contexte de priorité.

