2015-02-26 1 views
0

J'ai un functoïde de script sur la carte. Je dois passer le message au paramètre d'une méthode et retourner un document associé. La méthode que je pensais que fonctionnerait serait:Biztalk scripting Functoïde et documents

public XLANGMessage Map(XLANGMessage src); 

Cependant, je ne peux pas trouver confirmation; puis-je passer un message entier via l'outil de mappage, le traiter comme un document et renvoyer une réponse? Est-ce que mon approche est correcte?

Répondre

1

Les fonctoids de script ne peuvent accepter que des chaînes et renvoyer des chaînes. Vous devrez faire ce que vous essayez de faire dans une bibliothèque d'orchestration ou d'assistance, ou utiliser XSLT en ligne (qui pourrait sélectionner un ensemble de nœuds et produire une sortie basée sur cela).

Dans une orchestration, je ferais quelque chose comme ça dans une forme MessageAssignment:

msg_NewMsg = new System.Xml.XmlDocument(); 
UtilityClass.Map(msg_OldMsg, msg_NewMsg); 
msg_MapOutput.FieldToAssign = msg_NewMsg.OuterXml(); 

Où FieldToAssign est un champ distingué dans le message. Dans la classe utilitaires, vous devriez faire quelque chose comme ceci:

public static void Map(XLANGMessage from, XLANGMessage to) 
{ 
    using(MemoryStream ms = from[0].RetreiveAs(typeof(Stream))) 
    { 
    using (StreamReader reader = new StreamReader(ms)) 
    { 
     string x = reader.ReadToEnd(); 
     // do stuff with x; alternative, XDocument xd = XDocument.Parse(reader.ReadToEnd()); 
    } 
    } 
    to[0].LoadFrom(new StringReader(x)); 
    // alt: save the XDocument to a memory stream and call LoadFrom on the memory stream 
} 
+0

OK, comment puis-je déclencher l'orchestration et retourner quelque chose que je peux injecter dans un message? –

+0

Fourni un exemple de code. –

+0

Je vois ce que vous dites de votre exemple maintenant, c'est logique. Donc le code de transformation (votre premier code) peut être appelé à partir d'une expression, n'est-ce pas? Dois-je stocker le message de destination dans une variable, ou puis-je le faire dans un bloc de construction? –