The BizTalk Migration Starter is an open-source toolkit I created to streamline the migration of Microsoft BizTalk Server applications to modern Azure Logic Apps workflows.
As organizations move toward cloud-native architecture, this project addresses one of the most challenging aspects of modernization: converting existing BizTalk artifacts into their Azure Logic Apps equivalents while preserving business logic and integration patterns.
Architecture and Components
The BizTalk Migration Starter is available here: haroldcampos/BizTalkMigrationStarter and consists of four main projects and a test project, each targeting a specific aspect of BizTalk migration:
BTMtoLMLMigrator - BizTalk Map Converter
The BTMtoLMLMigrator is a tool that converts BizTalk Maps (.btm files) to the Logic Apps Mapping Language (.lml files). BizTalk maps define data transformations between different message formats, using XSLT and functoids to implement complex mapping logic.
Input:
Output:
Key Capabilities:
- Parses BizTalk map XML structure to extract transformation logic.
- Translates BizTalk functoids (string manipulation, mathematical operations, logical operations, date/time functions, etc.) to equivalent LML syntax
- Preserves source and target schema references
- Generates Logic Apps-compatible Liquid maps that can be directly deployed to Azure Integration Accounts
Core Components:
- BtmParser.cs: Extracts map structure, functoid definitions, and link connections from BTM files
- FunctoidTranslator.cs: Converts BizTalk functoid operations to Logic Apps Maps template equivalents
- LmlGenerator.cs: Generates the final LML output
- BtmMigrator.cs: Orchestrates the entire conversion process
- Models.cs: Defines data structures for representing maps, functoids, and links
To convert a single map:
BTMtoLMLMigrator.exe -btm "C:\BizTalkMaps\OrderToInvoice.btm" -source "C:\Schemas\Order.xsd" -target "C:\Schemas\Invoice.xsd" -output "C:\Output\OrderToInvoice.lml"
To Convert all maps in a directory:
Be mindful of having the right naming for schemas in the BizTalk maps to avoid the tool picking up the wrong schemas:
BTMtoLMLMigrator.exe -batchDir "C:\BizTalkMaps" -schemasDir "C:\Schemas" -outputDir "C:\Output\LMLMaps"
Recommendations and Troubleshooting:
- Make sure to use the real schemas, source and destination, and the corresponding map.
- Most BizTalk functoids are supported, however for those who don’t, like scripting, it will add the code into the lml file, expecting you to conduct a re-design of the scenario. Currently the Data Mapper does not have a direct function that replaces scripting functoids. We are exploring alternatives for this.
- Use GHCP agent to troubleshoot the tool if you run into issues.
ODXtoWFMigrator - Orchestration to Workflow Converter
The ODXtoWFMigrator tackles one of the most complex aspects of BizTalk migration: converting BizTalk Orchestrations (.odx files) to Azure Logic Apps workflow definitions. Orchestrations represent business processes with sequential, parallel, and conditional logic flows. It requires the orchestration and bindings file, exported from the BizTalk Application. If you don't have orchestration, for Content Routing Based scenarios, it uses the bindings file only.
Go to BizTalk Central Admin. Select your BizTalk Application:
Export all bindings. You can have multiple orchestrations in one binding file, so is important to export all the information available.
Input:
Output:
Key Capabilities:
- Parses BizTalk orchestration XML to extract process flows, shapes, and connections
- Maps BizTalk orchestration shapes (Receive, Send, Decide, Parallel, Loop, etc.) to Logic Apps actions and control structures
- Generates connector configurations for common integration patterns
- Creates comprehensive migration reports documenting the conversion process and any limitations
- Produces standard Logic Apps JSON workflow definitions ready for deployment
Core Components:
- BizTalkOrchestrationParser.cs: Analyzes orchestration structure and extracts workflow patterns
- LogicAppsMapper.cs: Maps BizTalk orchestration shapes to Logic Apps equivalents
- LogicAppJSONGenerator.cs: Generates the final Logic Apps workflow JSON
- OrchestrationReportGenerator.cs: Creates detailed migration reports.
- Schemas/Connectors/connector-registry.json: Registry of connector mappings and configurations
Recommendations and Troubleshooting:
- Most BizTalk shapes are supported, however for those who don’t, it will default to compose actions and inject the code or a comment. It supports most BizTalk adapters.
- If you need to add support to a new Logic Apps connector/service provider, you can update the connector-registry.json file by adding the trigger or action following the pattern for the other entries.
- This tool has been tested with multiple patterns and orchestrations. Use GHCP agent to troubleshoot the tool if you run into issues.
The following are some of the supported commands. Please run the command line and review the README files to see all supported commands.
|
Command |
Sample Usage |
|
MIGRATE / CONVERT |
|
|
With output file |
ODXtoWFMigrator.exe convert "C:\BizTalk\InventorySync.odx" "C:\BizTalk\BindingInfo.xml" "C:\Output\InventorySync.workflow.json" |
|
With refactored generator |
ODXtoWFMigrator.exe migrate "C:\BizTalk\MessageRouter.odx" "C:\BizTalk\BindingInfo.xml" --refactor |
|
BINDINGS-ONLY |
|
|
Basic bindings-only |
ODXtoWFMigrator.exe bindings-only "C:\BizTalk\ProductionBindings.xml" |
|
With output directory |
ODXtoWFMigrator.exe bindings-only "C:\BizTalk\BindingInfo.xml" "C:\LogicApps\BindingsWorkflows" |
|
With refactored generator |
ODXtoWFMigrator.exe bindings-only "C:\BizTalk\BindingInfo.xml" --refactor |
|
REPORT / ANALYZE |
|
|
Basic HTML report |
ODXtoWFMigrator.exe report "C:\BizTalk\OrderProcessing.odx" |
|
With output file |
ODXtoWFMigrator.exe report "C:\BizTalk\OrderProcessing.odx" --output "C:\Reports\OrderProcessing_Analysis.html" |
|
BATCH REPORT |
|
|
Process directory |
ODXtoWFMigrator.exe batch report --directory "C:\BizTalk\Orchestrations" |
|
Short directory flag |
ODXtoWFMigrator.exe batch report -d "C:\BizTalk\ContosoProject\Orchestrations" |
|
BATCH CONVERT |
|
|
Basic batch convert |
ODXtoWFMigrator.exe batch convert --directory "C:\BizTalk\Orchestrations" --bindings "C:\BizTalk\BindingInfo.xml" |
|
Alternative migrate syntax |
ODXtoWFMigrator.exe batch migrate -d "C:\BizTalk\AllOrchestrations" -b "C:\BizTalk\BindingInfo.xml" |
|
Specific files |
ODXtoWFMigrator.exe batch convert --files "C:\BizTalk\Order.odx,C:\BizTalk\Invoice.odx" --bindings "C:\BizTalk\BindingInfo.xml" |
|
With output directory |
ODXtoWFMigrator.exe batch convert -d "C:\BizTalk\Orchestrations" -b "C:\BizTalk\BindingInfo.xml" -o "C:\LogicApps\Workflows" |
|
With refactored generator |
ODXtoWFMigrator.exe batch convert -d "C:\BizTalk\Orchestrations" -b "C:\BizTalk\BindingInfo.xml" --refactor |
|
GENERATE-PACKAGE |
|
|
Basic package generation |
ODXtoWFMigrator.exe generate-package "C:\BizTalk\OrderProcessing.odx" "C:\BizTalk\BindingInfo.xml" |
|
With output directory |
ODXtoWFMigrator.exe generate-package "C:\BizTalk\OrderProcessing.odx" "C:\BizTalk\BindingInfo.xml" "C:\Deploy\OrderProcessing" |
|
With refactored generator |
ODXtoWFMigrator.exe package "C:\BizTalk\CloudIntegration.odx" "C:\BizTalk\BindingInfo.xml" --refactor |
|
ANALYZE-ODX / GAP-ANALYSIS |
|
|
Analyze directory |
ODXtoWFMigrator.exe analyze-odx "C:\BizTalk\LegacyOrchestrations" |
|
With output report |
ODXtoWFMigrator.exe analyze-odx "C:\BizTalk\Orchestrations" --output "C:\Reports\gap_analysis.json" |
|
LEGACY MODE |
|
|
Legacy basic |
ODXtoWFMigrator.exe "C:\BizTalk\OrderProcessing.odx" "C:\BizTalk\BindingInfo.xml" "C:\Output\OrderProcessing.json" |
BTPtoLA - Pipeline to Logic Apps Converter
BTPtoLA handles the conversion of BizTalk pipelines to Logic Apps components. BizTalk pipelines process messages as they enter or leave the messaging engine, performing operations like validation, decoding, and transformation.
Key Capabilities:
- Converts BizTalk receive and send pipelines to Logic Apps processing patterns
- Maps pipeline components (decoders, validators, disassemblers, etc.) to Logic Apps actions
- Preserves pipeline stage configurations and component properties
- Generates appropriate connector configurations for pipeline operations
Input:
Output:
Core Components:
- Pipeline parsing and analysis logic
- Connector registry (Schemas/Connectors/pipeline-connector-registry.json) for mapping pipeline components
- Logic Apps workflow generation for pipeline equivalents
To convert a receive pipeline:
BTPtoLA.exe -pipeline "C:\Pipelines\ReceiveOrderPipeline.btp" -type receive -output "C:\Output\ReceiveOrderPipeline.json"
To Convert a send pipeline:
BTPtoLA.exe -pipeline "C:\Pipelines\SendInvoicePipeline.btp" -type send -output "C:\Output\SendInvoicePipeline.json"
BizTalktoLogicApps.MCP - Model Context Protocol Server
The MCP (Model Context Protocol) server provides a standardized interface for AI-assisted migration workflows. This component enables integration with AI tools and assistants to provide intelligent migration suggestions and automation.
Key Capabilities:
- Exposes migration tools through a standardized MCP interface
- Enables AI-driven migration assistance and recommendations
- Provides tool handlers for map conversion and other migration operations
- Facilitates interactive migration workflows with AI assistance
Core Components:
- McpServer.cs: Main MCP server implementation
- Server/ToolHandlers/MapConversionToolHandler.cs: Handler for map conversion operations
- test-requests.json: Test request definitions for validating MCP functionality
BizTalktoLogicApps.Tests - Test Project
A complete test project ensuring the reliability and accuracy of all migration tools, with integration tests that validate end-to-end conversion scenarios.
Key Capabilities:
- Integration tests for BTM to LML conversion across multiple map files
- Schema validation and error handling tests
- Batch processing tests for converting multiple artifacts
- Output verification and quality assurance
Where to upload your data:
Upload your BizTalk artifacts in the Data directory, and run your tests using the Test explorer.
For a complete demonstration, watch the video below: