This blog is place holder for how to migrate a BizTalk Solution containing Cross Referencing Value functoids. I am currently searching for a good way to do this & if you have any good suggestions please let me know. Cross referencing data to translate a value used by one system to a value used by the other system. Firstly I will briefly explain how BizTalk Maps use these functoids to map one XML to another XML. Secondly I will show how to migrate these maps into Logic Apps .
The Problem – A BizTalk Map with Cross Referencing Functoids
While migrating some BizTalk maps into Azure I came across this very difficult example.
This transforms an invoice. The difficult portion of the map is highlighted above. The value cross referencing functoids convert a UOM from our system to to customers UOM for each order line on the invoice. This is a many to one mapping. For example DRUM & JERRY map to DR & EA, INNER & CYCLINDER map to EA.
How does this work? Firstly, the GET Common Value Functoid lookups the common value for the UOM from our system in this BizTalk XRef table. The appTypeID = 6 (BidDirectAU) & the valueXRefId = 4(UOM).
Secondly the result is passed via a Value mapping functoid into the Get Application Value functoid. This looks up the UOM in the customers system in the same BizTalk table. The appTypeID = 7 (Customer) & the valueXRefId = 4(UOM).
Siva Gujjui article shows how to set these tables up. These tables are designed to be extensible. For example another customer UOM mapping can be included with a different appTypeId value or another value map such as ACCOUNT can be include with a different valueXRefID. It is noteworthy that Value Cross Referencing functoids implement a simple cache as highlighted by Michael Stephenson, Charlie Mott & Coen Dijkgraaf. Unfortunately while these features are useful with BizTalk it makes migrating the map into Azure challenging. The rest of the srticle will talk about this.
Migrating the map in an Azure Logic App
The first step to migrate a BizTalk map is to convert it to XSLT. Once you do this you get a Extension Object like this.
However, standard methods to include this object will fail because it is specific to the BizTalk database. Thus for now I remove all the cross referencing functoids from the XSLT & just map our UOM directly across. The resultant XSLT can be imported into an integration account & run using a Logic App Transform XML action.
The resultant XML still does not contain the customer UOM and next we will enrich the XML with the correct UOM’s.
An Azure component to Replace Cross Reference functoids
Does anyone have a good way to do this?
Here is a solution by Michael Stephensen. Reference Data Mapping between Systems with Azure API Management – Microsoft Integration & Cloud Architect (mikestephenson.me)