Kader Yildirim
A la découverte de BizTalk Server 2006 3/3
Développer un assembleur pour BizTalk Server 2006 R2
Par Kader Yildirim publié le 06/05/2008 à 13:20, lu 1164 fois, 6 pages
 5 | Mise à jour de l'orchestration
Si on regarde avec reflector on note que la classe XLANGPipelineManager dispose d'une fonction static ExecuteSendPipeline qui permet d'invoquer par programmation le pipeline de sortie. Cette dernière prend en paramètre un élément de type SendPipelineInputMessages c'est-à-dire un set de messages et retourne le message résultant du traitement du pipeline :
 
/content/9090aac7-4114-420a-bcf2-af9544628ffb/ReflectorPipeline.PNG
 
Pour pouvoir appeler les fonctions que nous venons de voir depuis notre orchestration il faut ajouter une référence à l'assembly %WINDOWS%\assembly\GAC_MSIL\Microsoft.XLANGs.Pipeline\3.0.1.0__31bf3856ad364e35\Microsoft.XLANGs.Pipeline.dll dans notre projet :
 
/content/9090aac7-4114-420a-bcf2-af9544628ffb/AddRef.PNG
 
Maintenant nous allons créer la variable MessageToSend de type SendPipelineInputMessages qui va accueillir les messages à agréger avant de les passer au pipeline de sortie :
 
/content/9090aac7-4114-420a-bcf2-af9544628ffb/MsgToSend3.PNG
 
Après l'étape d'invocation de la sous-orchestration, nous allons ajouter une étape qui consiste à positionner dans le contexte du message issu de la transformation OutputMessage le nom du document source Part dans la propriété DecomposerMessageProperty (cellule en rouge dans le diagramme ci-dessous) :
 
/content/9090aac7-4114-420a-bcf2-af9544628ffb/Global2.PNG
 
Ceci permet lors de l'agrégation de remplacer dans le corps du message principal InputBaseMessage le fragment Part par OutputMessage (pour mémoire dans le document principal InputBaseMessage les emplacements à remplir sont identifiés par des Guid qui correspondent aux noms de parties).
Puis on ajoute le tout dans le message à donner en paramètre au pipeline de sortie :

MessageToAdd = OutputMessage;

MessageToAdd(PipelineComponentTester.DecomposerMessageProperty) = Part.Name;

MessageToSend.Add(MessageToAdd);

La dernière étape consiste à construire le message de sortie en appelant le pipeline que nous avons construit par programmation (cellule en jaune dans le diagramme ci-dessus) :

OutputMessage = null;

MessageToSend.Add(InputBaseMessage);

Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteSendPipeline(typeof(PipelineComponentTester.OutputPipeline),

    MessageToSend, OutputMessage);

Dans cet extrait de code on ajoute au message à donner en paramètre au pipeline le message principal InputBaseMessage puis on invoque la fonction d'appel qui retourne le résultat OutputMessage.

Si lors de la compilation vous avez des erreurs de ce type il suffit d'ouvrir l'étape d'invocation au pipeline et de rajouter un espace au début de la section de code et de relancer la compilation et là tout rentre dans l'ordre (le point d'exclamation sur le designer reste dans tous les cas) :
 
/content/9090aac7-4114-420a-bcf2-af9544628ffb/Errors.PNG
 
 
» Démarrer une discussion