Pages

lundi 4 mars 2013

Biztalk : Comment Changer le NameSpace d'un Message Xml a partir d'un Custom Receive Pipeline

Comment développer des Composants de  Custom Pipelines

Hé oui la partie dont chaque développeur  adore  J .
Avant de commencer ce petit tutorial, voici quelques fonctionnalités des Pipelines.
On distingue deux types de Pipelines : 
·         Pipelines de réception
·         Pipelines  d’envoi
Les Custom Pipelines sont utilisés pour réaliser une série d'opérations de traitement sur ​​les messages et aussi procéder a des traitement spécifique et complexe, par exemple :
·         Crypter et décrypter des messages
·         Signature des Message (numériquement parlons)
·         split d’un message en plusieurs
·         changement des propriétés de message (élément promus, entête ou pied de message)
·         etc .
  En résumé avec des customs Pipelines le traitement des messages devient EASY !!!
Cours théorique pour ceux qui aime les définitions J

Chaque  Pipelines contient des étapes et chaque étape peut détenir plusieurs composants de pipelines.


                                                                             
Il existe plusieurs catégories de composants de pipeline chacun fait un  travail spécifique lorsqu'il est  employés dans les étapes prédéfinies. Ces categories sont :

Composant
Etapes
Rôles
General

Decode, Encode, Pre-assemble, Resolve Party or Validate
Prendre un message de processus et de produire un ou pas de  message.
Disassemble
Disassemble
Splitter ou ventiler  un message et promouvoir les propriétés personnalisées.
Assemble
Assemble
Utilisé pour envelopper un message avec une en-tête.

allons y pour du code !!!!! .

Je vais créer un exemple de composant de pipeline général(General Component). Le scénario est très simple. Chaque fois que je reçois un message, je veux changer dans le message dans l'espace de noms

voici a quoi ressemble le message en entrée :
<Input xmlns="http://MonEspaceDeNomAchanger">
                <Nom>BARIGO</Nom>
<Prenom>Amine</Prenom>
  </Input> 

voici le résultat que je veux obtenir après modification : 

<Input xmlns="http://EspaceDeNomModifie">
                <Nom>BARIGO</Nom>
<Prenom>Amine</Prenom>
  </Input> 

let Start Working :)  :

Étapes : 
  1. Télécharger le Wizard des Custom Pipeline 
  2. après l'installation du wizard ,vous allez trouver une icone  avec les type de projet Biztalk :
  

création du pipeline apartir du wizard : 
  • choisissez le projet Biztalk Server Pipline Component 
  •  tapez le nom du projet (la routine habituelle :) )
  • puis remplissez les informations suivante 
    • nom du Composant
    • Version
    • la description

  • puis choisir la variable(s) que le Pipelines va utiliser (dans notre cas pas de variable utilisé ).

  • puis finish .

 

  • après avoir fini de remplir les informations pour votre Pipelines , il faut aller fouiller un peux dans le code , chercher une méthode Execute  
public Microsoft.Biztalk.Message.Interop.IBaseMessage   
               Execute(Microsoft.BizTalk.Component.Interop.IPipelineContext pc,                                                                                                                   
               Microsoft.BizTalk.Message.Interop.IBaseMessage pInMsg)

               {

                   // 

                  // TODO: implement component logic
                  // 
                  // this way, it's a passthrough pipeline component

Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream();
if (originalStream != null)
{
 
XmlDocument xdoc = new XmlDocument();
xdoc.Load(originalStream);
//l'appel  a cette methode procéde au changement de l'espace de Nom du Messaage
xdoc=ChangerEspaceDeNom(xdoc,"EspaceDeNomModifie");
pInMsg.BodyPart.Data = new MemoryStream();
xdoc.Save(pInMsg.BodyPart.Data);     
pInMsg.BodyPart.Data.Position = 0;
}
                     return pInMsg;
               }

  • dans cette méthode on va mettre le code qui va vous servir a changer l'espace de Nom de votre message .(allezzzzzzzzzzzzz restez concentré ).
  •  ajouter la nouvelle méthode  ChangerEspaceDeNom (il y a plusieurs methode pour modifier le NameSpace du message ).
public static System.Xml.XmlDocument ChangerEspaceDeNom(System.Xml.XmlDocument oldDoc, string EspaceDeNom)
        {

            try
            {
                oldDoc.DocumentElement.RemoveAllAttributes();
                oldDoc.DocumentElement.SetAttribute("xmlns", EspaceDeNom);
                System.Xml.XmlDocument newDoc = new System.Xml.XmlDocument();
                newDoc.LoadXml(oldDoc.OuterXml);
                return newDoc;
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }

  • après avoir  fini la partie du code, je vous invite a compiler votre solutions et générer votre DLL qui va nous servir comme référence dans votre projet Biztalk (n'oublier pas de signer la DLL).
Comment Utiliser le Custom Pipeline dans le projet Biztalk :
  • dans votre solutions Biztalk ajouter un nouveau élément :  Receive Pipeline

  • puis ajouter la référence a votre projet et dans la barre d'outils glisser votre composant dans l'etape decode :


  • Builder votre projet ,puis deployer la solutions et testez :).

j’espère que ce quick tutorial vous a donner une idée sur comment créer un Custom Receive Pipeline qui permet de Changer le Namespace d'un Message Xml.




Aucun commentaire:

Enregistrer un commentaire