Dans un développement Biztalk, il est très courant d’utiliser des enveloppes XML. En effet on va, par exemple, les utiliser pour :
- Regrouper un ensemble de messages
- Véhiculer des informations non contenues dans le message
- Véhiculer des messages de manière « opaque » (sans tenir compte du type de message)
Je vous propose ici un petit ensemble d’astuces très simples concernant l’utilisation de ces enveloppes.
Astuce 1 : Le Désassembleur XML détecte automatiquement les enveloppes et extrait les messages
Quand on configure un pipeline de réception pour désassembler une enveloppe, il est possible de préciser les enveloppes autorisées :

Ceci n’est pas obligatoire et sert uniquement à restreindre la liste des enveloppes qui seront désassemblées. En effet, si on précise une enveloppe autre que celle attendue, une erreur d’exécution du pipeline se produit :

Dans le cas général, on pourra donc opter pour un désassembleur XML (XMLReceive) sans spécifier ni l’enveloppe, ni les documents.
Astuce 2 : L’enveloppe sert à promouvoir des propriétés sur chacun des messages contenus
Il est très utile de promouvoir des champs d’une enveloppe. En effet ces promotions sont propagées sur chacun des messages sous-jacents.
Prenons par exemple l’enveloppe suivante :

Le champ « From » est promu dans une propriété de contexte : « Provenance ». Cette propriété va être promue dans le contexte de chacun des messages extraits de l’enveloppe.
Par exemple si on désassemble le fichier suivant,
<ns0:Enveloppe From="Albert" xmlns:ns0="http://www.btug.fr/Astuces/Enveloppe">
<ns0:Body>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Premier document</Text>
</ns1:DocumentBTUG>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Deuxieme document</Text>
</ns1:DocumentBTUG>
</ns0:Body>
</ns0:Enveloppe>
Deux messages vont être générés contenant chacun la valeur « Albert » promue dans la propriété de contexte « Provenance ».
Un des messages :

Son contexte :

Astuce 3 : Les enveloppes peuvent être combinées
Il est possible de véhiculer des enveloppes dans une enveloppe (façon poupées Russes). Dans ce cas le XMLDisasembler extrait chaque enveloppe de manière récursive, jusqu’à l’extraction des messages. L’intérêt est que chaque enveloppe peut publier ses propres propriétés.
Supposons que l’on désassemble le fichier suivant :
<ns3:Enveloppe Priority="Urgent" xmlns:ns3="http://www.btug.fr/Astuces/Enveloppe">
<ns3:Body>
<ns0:Enveloppe From="Albert" xmlns:ns0="http://www.btug.fr/Astuces/Enveloppe">
<ns0:Body>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Premier document</Text>
</ns1:DocumentBTUG>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Deuxieme document</Text>
</ns1:DocumentBTUG>
</ns0:Body>
</ns0:Enveloppe>
<ns0:Enveloppe From="Dupont" xmlns:ns0="http://www.btug.fr/Astuces/Enveloppe">
<ns0:Body>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>troisieme document</Text>
</ns1:DocumentBTUG>
</ns0:Body>
</ns0:Enveloppe>
</ns3:Body>
</ns3:Enveloppe>
On obtiendra alors 3 messages dont les contextes sont les suivants :



NB : Un point important à noter est qu’il n’est pas possible de mixer documents et enveloppes au sein d’une enveloppe.
Astuce 4 : Désassembler des messages dont le schéma n’est pas déployé dans BizTalk
Par défaut, si une enveloppe contient des messages non reconnus, l’enveloppe sera suspendue. Si on active le mode recouvrable, alors seul le message inconnu sera suspendu et il sera également possible d’activer le routage des messages en erreurs. Il existe cependant une troisième option particulièrement intéressante pour traiter les messages inconnus. Il s’agit d’une option du XMLDisassembler (AllowUnrecognizedMessages) :

Une fois cette propriété activée les messages sans schéma connu sont extraits de l’enveloppe et le XMLDisassembler va même jusqu’à promouvoir leurs types !
Par exemple le fichier qui suit contient un type de message non connu (« DocumentBTU » en lieu et place de « DocumentBTUG ») :
<ns0:Enveloppe From="Albert" xmlns:ns0="http://www.btug.fr/Astuces/Enveloppe">
<ns0:Body>
<ns1:DocumentBTUG xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Premier document</Text>
</ns1:DocumentBTUG>
<ns1:DocumentBTU xmlns:ns1="http://www.btug.fr/Astuces/Document">
<Text>Deuxieme document</Text>
</ns1:DocumentBTU>
</ns0:Body>
</ns0:Enveloppe>
Après passage dans le XMLReceive pipeline on obtient en sortie un message, et le type de document est également promu :
