|
Home > Archive > BizTalk Server Orchestration > February 2005 > Message Splitting in Orchestration
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Message Splitting in Orchestration
|
|
| Jeff Lynch 2005-02-17, 5:51 pm |
| I need to "split" an inbound message (in this case a single purchase order
with a header and multiple line items) into multiple messages based the
value of a field in each line item (such as requested ship date). The
desired output messages are copies of the inbound message containing all the
matching line items.
Can this be done in the orchestration itself or should I write a separate
..NET assembly which is called by the Orchestration?
--
Jeff Lynch
"A BizTalk Enthusiast"
http://codebetter.com/blogs/jeff.lynch/
| |
|
|
|
|
| Matt Milner 2005-02-18, 2:47 am |
| yes, you should be able to use an XPath query that has conditionals in it to
get all the nodes that match some criteria. You can also use a map with
some logical funtoids and possibly a looping functoid to copy,
conditionally, the nodes you want.
Matt
"Jeff Lynch" <jeff.lynch@houston-lynch.com> wrote in message
news:eDqrN2QFFHA.3732@TK2MSFTNGP14.phx.gbl...
> I'm very familiar with Stephen's work but I ned to split the message based
> upon a value in the message not just create a new message for each line
> item. I'm wondering if there is a way to use XPath in an Expression to
> create the "split" messages based upon a value in the message.
>
> --
> Jeff Lynch
> "A BizTalk Enthusiast"
> http://codebetter.com/blogs/jeff.lynch/
>
>
> "Neal Walters" <NealWalters@discussions.microsoft.com> wrote in message
> news:EE0755D6-912D-4169-BB76-5AA5379ED14D@microsoft.com...
>
>
| |
| Neal Walters 2005-02-20, 6:11 pm |
| We did one simple orchestration splitter because we getting frustrated trying
to make it work in the pipeline. It starts like this:
vXmlDoc = mAmazonOrderEnvelope;
vNodeList = vXmlDoc.DocumentElement.SelectNodes
("/AmazonEnvelope/Message/OrderReport");
vNumberMessages = vNodeList.Count;
vLoopCounter = 0;
Then we loop through each item in the NodeList, so the first shape in the
LOOP looks like this:
vNode = vNodeList.Item(vLoopCounter);
vNewXmlDoc.LoadXml(vNode.OuterXml);
mSingleOrder = vNewXmlDoc;
HOWEVER - use of the NodeList object required us to set the Transaction
Level to Atomic for the entire orchestration.
One nice thing about the orchestration, we also added a 10 second delay
between each individual order to help avoid deadlocks on our order database.
So if we receive 10 orders at once from Amazon, then they are spread over
about 2 minutes.
Neal Walters
http://Biztalk-Training.com - New SQL, FTP, HTTP, WebService Videos
|
|
|
|
|