Ordre de traitement et de contexte
Le contexte est l’un des aspects les plus cruciaux dans l’exécution du mappage. Comprendre le contexte est la clé d’obtention du résultat désiré dans la sortie. Le contexte détermine quelles données sont disponibles pour le nœud cible et ses descendants et quels items de source sont sélectionnés et copiés depuis la source vers le composant cible.
MapForce établit toujours le contexte actuel en commençant depuis l’item de racine cible (nœud). C’est là que l’exécution du mappage commence réellement. Après avoir traité le nœud cible, MapForce progresse en descendant la hiérarchie. Pour chaque nœud cible, les connexions sont suivies de retour aux sources, à travers toutes les fonctions qui se trouvent entre elles.
Pour chaque nœud cible, un nouveau contexte est établi qui contient initialement tous les nœuds source actuels du parent et tous les résultats de la fonction. Tandis que MapForce évalue les connexions menant directement ou indirectement aux connexions vers le nœud cible, des sources supplémentaires et résultats de fonction sont ajoutés au contexte. Les nœuds frère cible sont donc indépendants l’un de l’autre, mais ont accès à toutes les sources de leurs parents.
Pour un récapitulatif des règles fondamentales de l’exécution de mappage, voir Règles et stratégies de base.
Exemple
Pour mettre les principes décrits ci-dessus en pratique, nous discuterons le mappage suivant : MapForceExamples\PersonListByBranchOffice.mfd (illustré ci-dessous). L’objectif principal du mappage est de recevoir une liste d’employés avec leurs détails depuis un bureau particulier.

Structures source et cible
Dans notre exemple, le mappage contient un composant XML source et un compostant XML cible. De plus, il y a un composant ‘simple-input’ qui agit également comme source et fournit le nom du bureau des employés auxquels nous sommes intéressés. Le mappage affiche également différents composants de transformation tel un filtre et quelques fonctions.
Il est important de noter que MapForce affiche toujours uniquement les hiérarchies de schéma dans les composants structurels (par ex., XML). Par exemple, le composant BranchOffices affiche uniquement un élément Contact malgré le fait que le fichier d’instance source BranchOffices.xml contient de multiples nœuds Contact avec un contenu différent et dans différents nœuds parent Office. Un extrait de BranchOffices.xml est affiché ci-dessous.
<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
Dans notre mappage, le traitement commence par le nœud racine cible dénommé PersonList. Nous pouvons retracer la connexion via le filtre et la fonction equal à son élément source - Office.
Bureau individuel comme contexte pour la cible
Puisque notre mappage a un filtre, seules les données qui satisfont la condition booléenne seront mappées vers la cible. Cette condition n’est satisfaite qu’une seule fois, car il n’y a qu’un seul bureau dénommé Nanonull, Inc. dans le fichier XML source. En conséquence, la connexion depuis la liste PersonList à travers le filtre vers le nœud Office définit un seul bureau comme contexte pour le document cible entier. Cela signifie que toutes les connexions supplémentaires vers les descendants de l’élément racine seront affectées par le filtre et auront accès uniquement aux données de ‘Nanonull, Inc. office’, et aucun autre bureau n’existera dans le contexte actuel.
Une personne pour chaque contact
La prochaine connexion se trouve entre les nœuds Contact et Person. Conformément à la règle générale de mappage, elle créera une cible Person pour chaque source Contact. Sur chaque itération, cette connexion établit un Contact actuel pour les connexions aux enfants de l’élément Person. Pour cette raison, les connexions enfant (de first à First, last à Last) sélectionneront les prénoms et surnoms de l’élément Contact actuel et les écriront 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 aussi exécutée dans le contexte de chaque Person étant donné que la connexion parent entre Contact et Person. À chaque fois qu’un nouvel item Person est créé du côté cible, la fonction est appelée pour remplir l’élément Details de la personne.
La fonction prend trois paramètres d'entrée. Le paramètre OfficeName lit les données depuis un composant ‘simple-input’. Les données source pour ce paramètre peuvent aussi bien être fournies par l’item de source Name, sans aucunement changer la sortie de mappage. Dans tous les cas, la valeur de source est la même et prise depuis du contexte de parent. En interne, la fonction de consultation concatène les valeurs reçues en tant qu’arguments et produit une seule valeur.
Pour plus d’information sur comment la fonction LookupPerson est configurée, voir Mise en œuvre Look-up.
Si les parents ne sont pas connectés
S’il n’y a pas de connexion entre Contact et Person, le mappage créera uniquement une Person avec de multiples nœuds First, Last et Details. 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.
