Friday, November 04, 2005

Calling receive Pipelines from Inside orchestrations BTS2006

I had some Aggregator Orchestration which were running into Zombie situations ,. So when I got the biztalk 2006 beta version I was anxious to try out the new functionality of being able to call your receive pipeline from inside your Orchestration .

You can enumerate through the EnvelopeMessage passed into the recieve pipeline just like you would enumerate in an ICollection or Recordset using .MoveNext()

This is how my built Orchestration looked like

I will briefly try to capture the steps that I took

1.) Create a Document Schema SingleOrder.xsd

2.) Create an Envelope Schema TotalOrder.xsd

3.) Create a receive Pipeline SplitOrder.btp

4.) Add the XML Dissasembler and select the Document and envelope Schemas as above.

5.) Create your Recieve Port and set the document type to your Envelope Schema , This Port now has XMLPassthru transmit , I am calling this message IncomingFullMessage

6.) Now we enter Splitting scope ( Pipelines can only be invoked from Atomic scopes, Also it does not support Recoverable interchange processing when called this way )

7.) Add Microsoft.XLANGs.Pipeline as Reference and then ;declare a variable for the pipeline in my case OrderSplitter AS "Microsoft.XLANGs.Pipeline.ReceivePipelineOutputMessages"