Tuesday, January 3, 2012

XSLT In BizTalk Maps

XSLT is by default used by BizTalk maps (XSLT engine) to transform source schema to destination schema so there is nothing new (If you just open the .cs file of a map you can see it clearly there) Intention of this post is to highlight different usages of custom XSLT.

1) WHEN to use XSLT ?
I would prefer to use XSLT in following scenarios,
Whenever you have implement a complex logic in map. Like Grouping, Sorting or joining multiple input messages or carrying out operations with those multiple messages etc.

2) WHY XSLT and not Functoids ?
I totally understand that these things can be done using functoids as well. But as per my expereince if you open a map which uses a lot of functoids and try to analyse the .cs file of a map you will realise that,
i) There are a lot of simplifications can be done in that code like inline xslt functions can be used but instead functoids create .net functions for them.
ii) Also lot of unnecessary variables are created in XSLT which is by default generated by functoids.
iii) If you can write a good xslt you can write much more optimized.(Learning XSLT is pretty simple I would say.) Which in turn positively going to impact on your map execution performance.
iv) Debugging XSLT independantly is very easy infact the Map debugging feature introduced in BizTalk intern uses the same XSLT debug functionality (remember the XSLT debug window which is opened at time of debugging a Map). You can keep you xslt seperate (custom xslt) and test it with your sample input messages independantly.

3) What is Extension XML ? When to use it ?
When you need to call external assembly you will need the reference to extension xml. Link below will explain the details of extension xml.
http://msdn.microsoft.com/en-us/library/aa547368.aspx.

4) XSLT Grouping ,Sorting samples.
Some typical samples of xslt grouping,
e.g. Input message is






















This needs to be Grouped and Sorted we can use an XSLT as below,














and the Output will be















5) Different XSL Functions :-
Below link gives description of some of the XSLT 1.0 functions,
http://www.zvon.org/xxl/XSLTreference/Output/xpathFunctionIndex.html



Imp Note:- As of now Microsoft only supports XSL 1.0, XSL 2.0 is much more powerful and contains a lot of functions compared to 1.0. My Wishlist would include support for XSL 2.0 from Microsoft in future versions of XSLT engine.