Posted: 31st March 2016
Update: I’ve just realised the links in this article were wrong when I published
it, so have updated them.
I’ve decided to update my 2008 article on Understanding
the BizTalk Mapper for BizTalk 2013R2. You can download the article here (in .docx
and .pdf formats):
I originally wrote this article in 2008, and it was aimed at BizTalk 2006 R2.
Since then, we’ve had 3 more versions of BizTalk: 2010, 2013, and 2013R2. With BizTalk
2016 entering CTP in the next few days, I thought it was time to revisit this article
and update it for the latest (public) version of BizTalk.
At the time I wrote this article, I was of the view that the mapper was always the
answer. In fact, the reason I started the article was that I had an argument with
a colleague over what technology was better for transforming data in BizTalk: Maps
(i.e. XSLT) or C# (serializing/deserializing your XML into a class). I actually set
out to prove my colleague wrong by comparing the two – and ended up surprising myself
by just how little there was in the comparison.
years on, and my views have changed (somewhat): I spent 4 years working on a very
large BizTalk system that had huge throughput (200tps) and very low latency (
But this was not your average run-of-the-mill BizTalk system. The BizTalk Mapper
is still a very powerful tool, and with the advent of Azure and Microsoft’s cloud
integration platform (Logic Apps et al) the mapper will live on.
Over the last 8 years, people have asked why it’s important to know what each
of the functoids emit: The answer is that it’s the best way to understand what each
functoid does. If you can’t get your head around the documentation for the Table Looping
functoid (for example) then just look at what XSLT the functoid emits: this should
help you understand what it does.
What surprised me in doing this update is that there have been zero changes
to the mapper functoids since BizTalk 2006R2. The biggest change has been that support
for choosing whether to use XslTransform or XslCompiledTransform for
your maps – this can have a significant impact on performance (as seen later).
I’m still a firm believer that you shouldn’t be creating complex maps in the
Mapper unless you understand how XSLT works, and I hope that this article helps you
with that understanding.