Top 5 Indicators of the BizTalk Server 2013 Community’s Vitality

By Nick Hauenstein

This post is the twenty-fourth, and final, in a weekly series intended to briefly spotlight those things that you need to know about new features in BizTalk Server 2013.

For my final post in this series, I wanted to highlight something that is not part of the core on-premise product, or even a part of Windows Azure BizTalk Services. Honestly, it was a struggle trying to figure out what to close out this series on. I had debated ending with the coverage on WABS, the code-sample heavy posts on REST, or even an end-to-end build-out of a solution using the new SharePoint adapter. Instead, I am going to focus on something which really causes BizTalk Server 2013 stand out from the rest, and is born out of its lengthy history as Microsoft’s flagship integration platform – the BizTalk Server 2013 Community.

So without further ado, I would like to present, the Top 5 Indicators that the BizTalk Server 2013 Community is thriving now more than ever.

Expanded Community of Bloggers

It has been exciting over the last few years to see more people get involved with blogging about BizTalk Server. The ESB Toolkit, specifically, is something near and dear to my heart, and I’m seeing consistently great things related to the Toolkit coming from people like Tomasso Groenendijk, and Colin Meade on their respective blogs. It’s especially cool, though, to see blogs specifically dedicated to BizTalk Server Administration– as with Tord Nordahl’s blog.1 If you ever want to be inspired and feel like a small part of a much larger community, just read through either Richard Seroter’s 4 question series, or Steef-Jan Wiggers’ BizTalk Community Series.

New Community Sites

Lex Hegt has done some pretty interesting work lately for the BizTalk Server Community, but he’s not taking any credit in the process. Just last year he launched BizTalkEvents.com which aggregates event schedules from BizTalk Server user groups and training classes from all over the world. It also features a presentation archive organized by date and event, complete with slide deck downloads.

EDIT: Michael Stephenson also pointed out that another interesting initiative that has come about during this latest round of BizTalk Server offerings is the BizTalk Maturity Assessment, which helps organizations determine their level of maturity across a variety of different areas, and then use the results of the assessment to grow those areas in which they need work.

Robust Third-Party Products

houstonmissioncontrol Since BizTalk Server is often used to build mission critical systems, it has tended to attract fairly high quality third-party products. This generation of 3rd party products entering the BizTalk Server 2013 ecosystem is certainly raising the bar though for quality and innovation. One really only needs to look at the latest (currently in Beta) version of Kovai’s BizTalk 360 headed up by Microsoft Integration MVP Saravana Kumar. Fresh out of the trappings of Silverlight, and into the land of HTML5 goodness, BizTalk 360 is augmenting the BizTalk Server Administration Console with something that would make even Houston jealous.

The TechNet Wiki

Every time I go to the landing page for BizTalk Server articles on the TechNet Wiki, I wonder to myself what percentage of the overall wiki is comprised of articles about BizTalk Server. Countless community contributors and careful curating by contributors like Steef-Jan Wiggers, have grown this free-form body of knowledge into a treasure trove of information about all versions of BizTalk Server – including pointers to the edges of the BizTalk Server Community itself.

The BizTalk Summit

Finally, if you want to see the BizTalk Server community thrive, go to one of the BizTalk Summit events. Hosted by Microsoft, these are special events where the community can come together, meet each other, swap battle stories, and bond over the shared love of bringing systems together. Last year, I had the opportunity (along with Rob Callaway, John Callaway, Chap Phillips and Paul Pemberton of QuickLearn) to bring some hands on labs to life, showing both Salesforce integration and an early peak at the EDI capabilities of WABS. I’m hoping to be a part of bringing even more this year – especially now that we have a platform for easy setup of such labs in Azure.

Registration is open for the summit right now, so don’t miss it!

The End?

While this post does mark the end of my series on the new features in BizTalk Server 2013, I’m not going to pack up my mouse and keyboard and call it a year. We’ll keep this space up to date with interesting tidbits that come up along the way. Some of it will be new stuff, some will be written responses to frequent questions that come up in class – but hopefully all of it will be adding value to the BizTalk Server community as a whole.

Take care until next time!

– Nick Hauenstein

1 If you’re ever stuck at a conference with people you don’t know, go find Tord and he’ll talk to you as if you were his best friend and keep you entertained in the process).

Mapping Code Pairs in the WABS Mapper

By Nick Hauenstein

This post is the twenty-third in a weekly series intended to briefly spotlight those things that you need to know about new features in BizTalk Server 2013.

Assuming that one of the major benefits of using Windows Azure BizTalk Services is being able to offload some of our EDI processing to the cloud, then a major use case for the new WABS mapper becomes EDI mapping. One of the fun tasks that comes out of that is dealing with code pairs (if you’re interested in the on-premise side of this problem, the best coverage to date is found here). In this post, I’m going to examine how one might approach this problem using the new tooling available in the WABS SDK.

Give Me an Example of Code Pairs

Maybe you’re reading this and thinking to yourself, “I don’t really care about EDI, but WABS looks interesting,” and you still want to be able to gain something from this discussion without getting buried in the esoterica that is EDI. If that’s the case for anyone out there, here’s an example of the problem I’m going to try to solve using the WABS mapper.

We have an input that is a repeating record of items where there is a qualifier that describes that type of item we’re looking at, and a value that provides the value of the item. Consider this schema:

image

Here we have (at some point in the schema) a list of phone numbers, identified by a Type field element (our qualifier) and the Number field element (our value). The Type field is defined as follows:

image

We have an output that is a flat listing of items where we have a set of fields representing a few of these different types of numbers:

image

So what we are trying to do is iterate through the list of numbers in the input, map over the value for the item with the qualifier Mobile for the CellNumber output, and grab the value of the Home qualified number and toss it into the HomeNumber output field. It’s something that looks trivial, and yet is annoying to do en masse using the BizTalk Mapper:

image

In a Land Without FLATTENING Value MAPPERS

So what does this look like when brought over to the land of WABS using .trfm style maps? Well, looking into the toolbox, we do have an item called Conditional Assignemnt, which is essentially a Value Mapper:

image

If we run with that (combined with some Logical Expression map operations, we end up with something like this:

image

Unfortunately, this isn’t a Value Mapper (Flattening) type map operation. As a result, this actually will only work if we are interested only in a single qualifier, and that qualifier happens to show up in the first code pair that appears in the document.

So what do we do now? Do we reach to XSLT and code it up by hand (after-all, it is super easy to pull off)? Let’s take a look at how the migration tool that comes with the SDK handles this scenario:

image

It adds two MapEach operations to the map, that are configured something like this:

image

As you can see, the MapEach was made to be conditional upon the Type field element being compared to a constant string input. However, this conditional check is repeated inside the MapEach operation within the chained Logical Expression and Conditional Assignment map operations. While the map technically works as generated by the tool, it looks horrible, and it really feels like there ought to be a better way.

Another Approach

If you don’t want to use the MapEach approach (which really wouldn’t be so bad if our two nodes weren’t hanging out at the root as siblings), then we can take advantage of the ability of the new mapper to generate lists of items in memory while working through the mapping (really this is kind of similar to the Table Looping and Extracting functoid).

In order to make that happen, we use the Create List map operation, and then at some point inside include the Add Item operation to add items to the list. The Create List operation is configured to include the names of the fields of each item in the list. It then includes the ForEach operation with a nested Add Items. The ForEach is pointed to by the parent repeating node of our code pairs. The Add Items operation is pointed to by each value we want to include for each source item:

image

Here’s what the configuration of the Create List map operation looks like:

image

Once we have the list created, we can select values out of the list using the Select Value operation (in fact we’ve used two of them):

image

Does it Work?

Technically, both approaches worked, and took this input, and generated the output shown below it:

image

image

I’m going to be honest here, it still feels comparatively clunky, and I’m probably going to be reaching for that XSLT override pretty frequently. That is, unless there’s yet another way that’s cleaner and more simple than those presented thus far (this is one of those posts that I hope to revisit in the future with a correction showing an even better way to approach the problem).

Next Week

Next week, I will be wrapping up this series and shifting focus back to day-to-day BizTalk Development and all the fun things that we’re actively working on there.

Until then, happy mapping with shiny new tools!