Start an Orchestration if an other Orchestration gets a specific value - biztalk

I would like to do a main orchestration that receive a specific message and with a specific value in this message the main orchestration can call another orchestration (with call orchestration shape) that receive a different message with receive shape and do other function
Note: the main orchestration and the other orchestration is in the same project
in general how can I proceed with 2 orchestration with a receive shape in each one

I think you are heading toward the wrong direction, what you can do is like this.
Create a main orchestration,and receive the message (your specific) from message box.
In your orchestration, check the value you want to check.
When it is necessary to pass the message to another orchestration, you don't call the orchestration direction. create a new message, use a map, to transfer the message you got to the message which another orchestration is listening.
Publish the message back to message box.
In this way, you don't need to call the orchestration directly. BizTalk will help you to schedule and passed message to the orchestration that you want to invoke.
Or you can use a message only solution, which means , you don't need to have a main orchestration at all, you can setup filters on your receive location, and then use map to transfer the message.

Related

failed response from web service for child orch

I am using a scatter-gather pattern to call a webservice:
I am receiving an envelope message.
I am debatching an envelope message by executing an xml pipeline in orchestration.
calling a child orchestration for each debatched message using start orchestration and self-correlating port.
calling a web service for each debatched message in my child orchestration and returning the response to the caller.
aggregate the response message and sent it back to the user.
My question is there any way so that if my child orchestration failed for even one of the debatched message i get the error response and send it to the user without continuing any further process.
Yes, but using the Start Orchestration Shape makes it challenging.
One relatively easy way would be to still return the correct MessageType to the Scatter Orchestration, but with a Context Property indicating an Error occurred.
You'd then have to check this property on each returned message. After checking all the Gathered messages, decide what to do.

How to publish an any element from envelop schema to MessageBox

I have an envelope message (EM), in this EM there some elements which are promoted on the context (for routing) and there is one Any element (called Payload) holding the actual schema instance for further use (other orchestrations are subscribing to that Payload instance).
This is a generic service (WCF, request-response) receiving the request message, returning a response message (having some elements of the request and with a new generated unique transaction ID) and a fault message (when applicable).
The Payload must be published on the MessageBox (direct binding) with some of context properties of the EM.
How can this be done most effectivly ?
Do you know about how to process envelope schemas using an xml disassembler component inside a receive pipeline? It is not clear from your question if you have tried this or not or if this is even the challenge you are facing.
If not then read here: http://msdn.microsoft.com/en-us/library/aa546772(v=BTS.20).aspx
Can I just confirm
WCF client sends a message matching the Envelope Schema
You wish to debatch the Envelope Schema into one or more Payload messages contained inside for the Payload processing orchestration.
? Do you need to wait until all Payload messages are processed until you respond back to the WCF client with a success / fail response (i.e. the response is dependent on the completion of the Payload messages).
If you don't need point 3) then your WCF orchestration can just send a 'yes' message back to the WCF client without worrying about what happens to your payload.
The standard XMLReceive on your WCF Receive location should be able to debatch the message automagically as long as it recognises it as an Envelope schema, i.e. contains
<b:schemaInfo is_envelope="yes" xmlns:b="somexmlns"/>
<b:recordInfo body_xpath="xpathtoroot"/>
However, if you do need point 3 a problem I can see is that because you are using WCF request-response, is that the client is going to want a synchronous response back depending on the Payload processing. It would be difficult to do this using the standard envelope debatching as you would need to correlate the progress and results of your payload processing back to your WCF orch - instead, you might just keep your outer (Envelope) schema as non-envelope, and use a custom receive pipeline in your WCF orch to split out the messages and then loop through each and call your payload processing Orchestration.
http://mstecharchitect.blogspot.com/2008/12/debatching-biztalk-xml-messages.html

Biztalk message propery promotion

I have an orchestration which should be kicked off when a text file comes in from a receive location,
as far as I can see things look as they should but the orchestration isn't starting and I get this in the admin console:
The published message could not be routed because no subscribers were found. This error occurs if the subscribing orchestration or send port has not been enlisted, or if some of the message properties necessary for subscription evaluation have not been promoted. Please use the BizTalk Administration console to troubleshoot this failure.
Does this mean I have to promote the message properties and if so do I do that in the orchestration?
With a text file, the inbound message will not by default have enough information in it to allow the BTS runtime to route your message. You need to pass the message into a flat file dissembler, which will convert your flat file message into an xml message.
The process of disassembly to xml will promote certain things into the context of the message, one of which will be the message type.
By default this is what your orchestration subscription will be based on if you have set things up in the most usual fashion.
Your problem is likely due to one of the following:
You don't have a flat file disassembler as a stage in your inbound pipeline, or it is set up incorrectly.
Your orchestration subscription is for a message type which does not match the type of message being dissembled.
To further troubleshoot, after starting your orchestration run a query for subscriptions from the BizTalk Admin Console. You should be able to see a row (or two) for your orchestration, with type = "Activation".
You should be able to see the criteria against which the BTS engine will have to successfully evaluate so that inbound messages reach your orchestration.
Also you can enable tracking on inbound messages and inspect the body of the message which comes in before and after disassembly.
Hope this helps

Biztalk, need to consume a web service

What I need to do to send a request and to receive answer from the Web Service that I want to consume.
What i have done:
I have done the "add web Reference"
I added a Send Shape and a Receive Shape and a I configured a port that sent and received with web Type, the port binding Specify later and I connect with the Request and response to the Send and Receive shape.
I believe I am missing something ?
From your description I am guessing you might be missing -
A definition of the request and
response messages; you need to
ensure you have a request and
response message defined, with their
types being the generated web types.
Select the correct message for both
the send and receive shape. send
shape uses the request message,
receive shape uses the response
message.
Construct the request message using a construct and a transform or assignment shape before the send shape. the easiest way to get started is to use a map in a transform shape to create the request from whatever message triggered your process, but the exact implementation detail will, of course, depend on your scenario
This should be enough to call the service I would have thought
There are many blog posts on the subject, here's one I found with a quick search that shows all the pieces needed
I'm currently working my way through a project using Biztalk to consume a web service. I think you may have a error when compiling similar to :
"Use of unreconstructed message"
If this is the problem, add a construct message shape to the orchestration before the send to the web service port.
I'm stuck with creating the message syntax but this should get you moving.

How to Call BizTalk Orchestration Dynamically

How can I call a BizTalk Orchestration dynamically knowing the Orchestration name?
The call Orchestration shapes need to know the name and parameters of Orchestrations at design time. I've tried using 'call' XLang keyword but it also required Orchestration name as Design Time like in expression shape, we can write as
call BizTalkApplication1.Orchestration1(param1,param2);
I'm looking for some way to specify calling orchestration name, coming from the incoming message or from SSO config store.
EDIT: I'musing BizTalk 2006 R1 (ESB Guidance is for R2 and I didn't get how it could solve my problem)
The way I've accomplished something similar in the past is by using direct binding ports in the orchestrations and letting the MsgBox do the dirty work for me. Basically, it goes something like this:
Make the callable orchestrations use a direct-bound port attached to your activating receive shape.
Set up a filter expression on your activating receive shape with a custom context-based property and set it equal to a value that uniquely identifies the orchestration (such as the orchestration name or whatever)
In the calling orchestration, create the message you'll want to use to fire the new orchestration. In that message, set your custom context property to the value that matches the filter used in the specific orchestration you want to fire.
Send the message through a direct-bound send port so that it gets sent to the MsgBox directly and the Pub/Sub mechanisms in BizTalk will take care of the rest.
One thing to watch out in step 4: To have this work correctly, you will need to create a new Correlation Set type that includes your custom context property, and then make sure that the direct-bound send port "follows" the correlation set on the send. Otherwise, the custom property will only be written (and not promoted) to the msg context and the routing will fail.
Hope this helps!
Look at ESB Guidance (www.codeplex.com/esb) This package provides the functionality you are looking for

Resources