Partager via


Opérations de mappage simples et complexes

Le Mappeur BizTalk propose des solutions pour divers scénarios de mappage, des opérations simples de type arborescence des relations parent-enfant jusqu'aux opérations détaillées et complexes impliquant des hiérarchies et des enregistrements de boucle. La complexité d’un scénario de mappage dépend de vos préférences et des besoins de l’entreprise ; le langage XSD (XML Schema Definition) vous offre une grande flexibilité pour la définition des formats structurés. Presque tous les scénarios de mappage appartiennent à l’une des deux catégories suivantes : mappage de base et mappage complexe.

Mappage simple

Le mappage simple est le type de mappage le plus courant. Dans un mappage simple, les éléments d’entrée et de sortie ont une relation un-à-un. À un élément d'entrée correspond un et un seul élément de sortie. Bien que de nombreux types de transformations et de traductions soient possibles avec un mappage de base, comme l’utilisation de plusieurs fonctoids et de fonctoids en cascade pour manipuler la valeur copiée, le scénario sous-jacent reste relativement simple. Les opérations de mappage simple incluent également le mappage de champs issus de deux enregistrements parents différents (se produisant une seule fois) avec des champs d’un seul enregistrement parent dans le schéma de destination.

Mappage complexe

Le mappage complexe implique des enregistrements ou des champs qui se produisent plusieurs fois pour un seul instance du nœud Record ou Field Element dans l’arborescence du schéma. Leur propriété Max Occurs est définie sur une valeur supérieure à un (1), ce qui indique qu’il peut y avoir plusieurs éléments correspondants dans un message instance. Lorsqu’une carte BizTalk utilise ce type de mappage de nombre de variables (également appelé boucle), le compilateur de feuille de style XSL (Extensible Stylesheet Language) doit être en mesure de déterminer le chemin de boucle approprié sur lequel itérer pour produire la sortie requise.

En règle générale, vous pouvez lier un champ d’un enregistrement de bouclage du schéma source à un champ se trouvant dans un enregistrement de bouclage du schéma de destination. Du nombre d’éléments correspondants dans un message d'instance d'entrée dépend le nombre d'éléments créés dans le message d'instance de sortie. Prenons l’exemple des fragments XSD suivants issus de schémas source et de destination hypothétiques.

Fragment de schéma source

<xs:element minOccurs="1" maxOccurs="5"  
            name="SrcLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
    </xs:sequence>  
  </xs:complexType>  
</xs:element>  
  

Fragment de schéma de destination

<xs:element minOccurs="0" maxOccurs="unbounded"  
            name="DstLoopingRecord">  
  <xs:complexType>  
    <xs:sequence>  
      <xs:element name="" type="xs:string" />   
      <xs:element name="" type="xs:integer" />   
      </xs:sequence>  
    </xs:complexType>  
  </xs:element>  
  

Dans ces fragments :

  • SrcLoopingRecord, un nœud Record dans les messages d’entrée instance, peut se produire de une à cinq fois. Il contient également les nœuds d’élément field enfants Field1 (chaîne) et Field2 (un entier) qui se produisent une fois pour chaque instance de leur parent.

  • DstLoopingRecord, un nœud Record dans la sortie instance messages, peut se produire zéro (0) fois ou plus, sans limite. Il contient également les nœuds d’élément field enfants FieldA (chaîne) et FieldB (entier) qui se produisent une fois pour chaque instance de leur parent.

    En supposant que Field1 soit mappé sur FieldA et Field2 sur FieldB, et que le fragment suivant d'un message d'instance d'entrée ait traité ces mappages, le fragment suivant d'un message d'instance de sortie serait produit.

Fragment de message d’instance d’entrée

<SrcLoopingRecord>  
    <Field1>A string</Field1>  
    <Field2>10</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>Another string</Field1>  
    <Field2>11</Field2>  
</SrcLoopingRecord>  
<SrcLoopingRecord>  
    <Field1>A ball of string</Field1>  
    <Field2>12</Field2>  
</SrcLoopingRecord>  

Fragment de message d’instance de sortie

<DstLoopingRecord>  
    <FieldA>A string</FieldA>  
    <FieldB>10</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
  <FieldA>Another string</FieldA>  
  <FieldB>11</FieldB>  
</DstLoopingRecord>  
<DstLoopingRecord>  
    <FieldA>A ball of string</FieldA>  
    <FieldB>12</FieldB>  
</DstLoopingRecord>  

Le nombre d’occurrences de l’élément SrcLoopingRecord dans l’entrée instance message (3) détermine le nombre d’occurrences de l’élément DstLoopingRecord dans la sortie instance message.

Le Mappeur BizTalk ne prend pas en charge le type de mappage présentant plusieurs chemins de bouclage. Ce type de mappage implique des champs de deux enregistrements de boucle ou plus dans le schéma source qui est mappé sur les champs d’un seul enregistrement de boucle dans le schéma de destination. Cela pose un problème dans la mesure où il n’y a pas de moyen efficace permettant de déterminer le nombre d’éléments à produire dans le message d’instance de sortie. La présence de plusieurs chemins de bouclage donne lieu à un avertissement de compilation de mappage indiquant que le nœud de destination comporte plusieurs chemins de bouclage source. Il ne s’agit, toutefois, que d’un avertissement, et le nombre d’itérations dans le premier chemin de bouclage source est utilisé pour déterminer le nombre d’éléments produits dans le message d’instance de sortie. Vous pouvez prendre un contrôle explicite du comportement de boucle à l’aide du fonctoid Looping .

Microsoft BizTalk Server introduit un nouveau type de boucle appelé boucle pilotée par table. Le bouclage piloté par la table est utile lorsque le message d’instance de sortie doit être basé sur des données du message d’instance d’entrée en combinaison avec une ou plusieurs constantes, des liens du schéma source ou avec des fonctoids. Dans ces cas de figure, le message d'instance de sortie peut disposer de plusieurs enregistrements basés sur des données d'un seul enregistrement dans le message d’instance d’entrée combinées avec différentes constantes, ou basés sur des données issues de plusieurs enregistrements dans le message d’instance d’entrée. Pour plus d’informations sur la boucle pilotée par table à l’aide des fonctoids De boucle de table et Extractor de table, consultez Fonctoids de boucle de table et Extracteur de table.

Voir aussi

Maps
Création de mappages à l'aide du Mappeur BizTalk