|Optional BizTalk messages||Thursday 24th September 2009|
I've been scratching my head over how to get two messages, one of which is optional, into BizTalk and linked up.|
I tried a sequential convoy, with the second receive shape waiting for the second file, but as the message type differs, this isn't allowed.
So I tried a parallel convoy, with the second receive set in a listen shape with a timeout. This too is not allowed (cannot have a timeout on an activating receive shape).
The solution is to do the second one, but instead of timing out with a listen shape, it's to use a long-running scope with a timeout set on the scope. This seems to work fine, if your optional message doesn't appear within the set period, it throws an exception (which is duly discarded) and everything continues on it's merry way.
|BizTalk Business Rules Engine||Monday 7th September 2009|
The Microsoft BizTalk Business Rules Engine (BRE) allows a pain free (sic) way of making decisions outside of code.|
The idea is is, you pass some objects in (XML files, Database tables, .NET classes) and based on the data within the instance you pass in, you make decisions and update them, or other objects.
Realistically, the rules composer is difficult to work with and you have to resort to frigging things to get it to work. Specifically missing XML elements and unpublishing existing polices and vocabs.
I've got stuck on a more fundamental thing though, getting data out.
Passing in an XML document with some info, I want to then generate some information based on some simple rules. This is information does not have any place to exist in the input schema. So I created a new output message.
I can drag a shape onto the actions and set a value. Super. But it's not available within BizTalk's Call Rules shape. I think this turns out to be due to the schema not being GAC'ed in an assembly first, as it never displayed a message type before the node path.
A deploy of my output schema and restart of the composer showed better results.
I think you also need to stub out the message you want to output prior to running the rules. So you'll have to do a nasty XmlLoad or such in your Orchestrations.
I'm trying to see if it's possible to send out simple/base types, like strings. As a lot of the use I have for the BRE is just making a single decision based on a variety of inputs.