About a month ago I announced the release of the beta installer for the BRE Pipeline Framework. Since then I have been hard at work trying to get the framework up to scratch with the goal towards starting to use it on new projects, and at the very least to use it to make POCs a lot quicker. I have added a lot of new features to make the framework easier to use, and made a lot of tweaks.

For those who don’t know too much about the framework, the whole idea is to remove the need to constantly write variations of pipeline components used to manipulate a message’s context or body along with all the deployment issues and complications that arise when changes are required for these components, and to instead use a pipeline component that allows for message manipulation logic to be encapsulated into the BRE (Business Rules Engine) so that developers are concentrating on logic instead of plumbing.  Further details on the framework are listed on the codeplex project page, and documentation detailing installation and usage is included on the codeplex project documentation page.

Details on some of the changes below (there are many more but these are the most important ones).

  • The BREPipelineFramework.SampleInstructions.ContextInstructions vocabulary now contains definitions that allow you to get and set context properties from all the out of the box BizTalk and EDI context properties through enumeration (ie. you don’t need to know the name/schema namespace of the properties, you just need to know the .NET namespace such as BTS, EDI, or SQL and can select the property from a drop down list).
  • The set type vocabulary definitions in the BREPipelineFramework.SampleInstructions.ContextInstructions vocabulary will now allow you to set values to context properties of any type (parameter on the method changed from string to object), not just strings.
  • It is now not possible to manipulate a BizTalk message in a rule condition, only in an action which makes the framework a whole lot safer to use.  Any errors encountered in the pipeline will result in the original message/context being reverted to.
  • The pipeline component now uses VirtualStream instead of MemoryStream to improve memory management for large messages.
  • Fixed bug in the GetXPathResult definition in the BREPipelineFramework.SampleInstructions.HelperInstructions whereby the stream position wasn’t being reset and thus the message body was being lost.
  • Added BizUnit based pipeline unit tests to provide a pretty good level of coverage for functions provided by the framework.
  • Comments made throughout the source code to make it easier to understand for those who want to dive into it and extend the framework with their own MetaInstructions and Instructions.

I encourage you to try to make use of the framework and give me any feedback that you have.  My belief is that the learning curve should not be too steep and that it has the potential to increase productivity and allow developers to turn around solutions a lot faster but I need the community’s help to qualify this.  Please post any feedback to the codeplex project discussion page.

To pique your interest, below is a screenshot of one of the rules used in the framework unit tests to give you an idea of what is possible with the framework (note the use of enumerations to choose the relevant context properties).