XML 문서 병합
OrderBroker 오케스트레이션에서 만드는 메시지 중 하나는 SQL Server 기록 데이터베이스를 업데이트하는 메시지입니다. 이 메시지에는 주문 메시지의 필드와 원래 주문 메시지가 포함됩니다. 원래 주문은 이 메시지에 문자열로 표시되며 데이터베이스에 있는 주문 기록의 데이터 형식과 일치합니다.
메시지를 가져와서 문자열로 변환한 다음 맵을 사용하여 다른 메시지에 넣을 수는 없습니다. 오케스트레이션은 도우미 함수 InsertOrderBody를 사용하여 원래 순서 메시지를 기본 기록 메시지에 문자열로 추가합니다.
OrderBroker 오케스트레이션은 CSR_OrderRequest_To_SQLHistoryInsert 맵을 사용하여 주문 메시지를 기본 기록 메시지로 변환합니다. 주문에 대한 정보는 OrderLog 요소의 특성으로 표시됩니다. 원래 메시지는 이 요소의 다른 특성으로 표시됩니다.
InsertOrderBody 메서드는 원래 순서 메시지, 기본 기록 메시지를 인수로 사용하고 완료된 기록 메시지를 반환합니다. 다음 코드는 메시지를 문자열로 삽입하는 메서드의 일부를 보여 줍니다.
public static XmlDocument InsertOrderBody( XmlDocument orderDoc,
XmlDocument historyInsertDoc)
{
...
XmlNode root = historyInsertDoc.FirstChild;
//Create a new attribute.
XmlNode attr = historyInsertDoc.CreateNode(XmlNodeType.Attribute,
"OriginalMsg", root.NamespaceURI);
attr.Value = orderDoc.OuterXml;
try
{
// XPath expression not shown for formatting reasons and
// replaces ".." in the following code
XmlNode destnode = historyInsertDoc.SelectSingleNode("..");
//Add the attribute to the document.
destnode.Attributes.SetNamedItem(attr);
}
...
return historyInsertDoc;
}
두 인수가 모두 수신되었는지 확인한 후 InsertOrderBody 메서드는 기록 업데이트 메시지의 루트 노드를 찾습니다. 그런 다음 OriginalMsg 특성이 포함된 노드를 만들고 원래 순서 메시지를 특성 값에 할당합니다. 이 시점에는 노드가 존재하기만 하고 요소의 일부가 아닙니다.
특성 노드를 만든 후 메서드는 XPath 식을 사용하여 특성을 연결할 노드를 찾습니다. 노드를 찾은 후에는 노드의 특성 컬렉션에 특성 노드를 추가합니다.
참고
OriginalMsg 특성은 처음에는 기본 기록 메시지에 없지만 스키마에 지정됩니다. 코드에서 메시지에 추가하는 XML 요소는 해당 메시지에 대한 스키마에 지정되어 있어야 합니다.