OrderLineFieldValues column serialized as escaped text in live integr…#70
Open
DWDBE wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Observed behaviour
When the Include custom order line fields in request setting is enabled, the OrderLineFieldValues column inside the EcomOrderLines table of the outgoing order XML contains HTML-escaped text instead of proper nested XML:
The ERP receives a literal string rather than structured XML, making the field unparseable.
Expected behaviour
MyField SomeValue
Root cause
The bug is in OrderXmlGenerator.cs at line 339:
AddChildXmlNode(itemNode, "OrderLineFieldValues", OrderLineFieldValuesToXml(orderline.OrderLineFieldValues).InnerXml);
OrderLineFieldValuesToXml() correctly builds an XmlDocument with proper XML nodes. .InnerXml is then called on it to extract the XML as a string. That string is passed to AddChildXmlNode(), which assigns it via:
node.InnerText = nodeValue; // XmlGenerator.cs
InnerText treats its input as plain text and XML-escapes all special characters (< → <, > → >). The result is the XML structure rendered as an escaped string rather than embedded XML nodes.
Fix
At the call site in OrderXmlGenerator.cs, bypass AddChildXmlNode and use XmlDocument.ImportNode to deep-copy the XML nodes into the parent document directly:
// Replace line 339: // AddChildXmlNode(itemNode, "OrderLineFieldValues", // OrderLineFieldValuesToXml(orderline.OrderLineFieldValues).InnerXml); var fieldValuesNode = itemNode.OwnerDocument.CreateElement("column"); fieldValuesNode.SetAttribute("columnName", "OrderLineFieldValues"); fieldValuesNode.AppendChild( itemNode.OwnerDocument.ImportNode( OrderLineFieldValuesToXml(orderline.OrderLineFieldValues).DocumentElement, deep: true)); itemNode.AppendChild(fieldValuesNode);
ImportNode copies the element tree into the target document's namespace as real XML nodes, so the output is properly structured XML rather than escaped text.