2013-10-02 10 views
6

Ustawiam wartość elementu wewnątrz kształtu Przypisanie wiadomości w Orkiestracji. Używam do tego funkcji XPATH.BizTalk - CDATA w kształcie przypisania wiadomości

Tekst musi być zawarty w sekcji CDATA. Jest to, jak próbowałem to zrobić:

xpath(messageOut, "//Envelope/Body/MsgFFmt") = @"<![CDATA[" + _response + @"]]>"; 

Jednak BizTalk ucieka go i tekst wewnątrz elementu kończy się wyglądać jak ten:

<MsgFFmt>&lt;![CDATA[response content goes here]]&gt;</MsgFFmt> 

ja nie mogę znaleźć nic na web w odniesieniu do instruowania BizTalk, że potrzebuję sekcji CDATA wokół mojego ciągu _response. Ktoś może pomóc?

Dzięki

+1

Mają cię widziałeś tego bloga? http://soa-thoughts.blogspot.co.nz/2007/07/cdata-mapping-experience-inside-biztalk.html – Dijkgraaf

+0

Dzięki! Zaimplementowałem coś podobnego do tego, co zostało zademonstrowane w artykule; tego właśnie potrzebowałem! – gmang

Odpowiedz

6

będę odpowiedzieć na moje własne pytanie, aby podzielić się nim w przypadku gdy ktoś patrzy. To była oparta na tym stanowisku: http://soa-thoughts.blogspot.co.nz/2007/07/cdata-mapping-experience-inside-biztalk.html

skończyło się na utworzenie klasy pomocnika:

public class MessageHelper 
{ 
    /// <summary> 
    /// Sets a CDATA section in a XLANG message. 
    /// </summary> 
    /// <param name="message">The xlang message.</param> 
    /// <param name="xPath">The xpath for the element which will contain the CDATA section.</param> 
    /// <param name="value">The contents of the CDATA section.</param> 
    /// <returns>The resulting xml document containing the CDATA section</returns> 
    public static XmlDocument SetCDATASection(XLANGMessage message, string xPath, string value) 
    { 
     if (message == null) 
      throw new ArgumentNullException("message"); 

     if (message[0] == null) 
      throw new ArgumentNullException("message[0]"); 

     var xmlDoc = (XmlDocument)message[0].RetrieveAs(typeof(XmlDocument)); 

     var cdataSection = xmlDoc.CreateCDataSection(value); 
     var node = xmlDoc.SelectSingleNode(xPath); 

     if(node !=null) 
     { 
      node.InnerText = String.Empty; 
      node.AppendChild(cdataSection); 
     } 

     return xmlDoc; 
    } 
} 

ten sposób można wywołać go z formy po DLL było GAC:

MessageOut = MessageHelper.SetCDATASection(MessageOut, "/Envelope/Body/MsgFFmt", _string);