Data Mapper in Azure Logic Apps Standard

Bastien DALLARD
Published by Bastien DALLARD
Category : Azure / Logic Apps
15/09/2026

Within an integration system, applications rarely exchange data using exactly the same structure. An API may produce an order in JSON format, while an ERP expects a document with different property names, a different structure, or calculated values.

Azure provides several mechanisms for manipulating and transforming messages. The choice of tool depends primarily on the nature of the processing to be performed.

 
 

What is the Data Mapper?

 

The Data Mapper is a design tool available in Visual Studio Code with the Azure Logic Apps (Standard) extension: https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps.

It allows you to model a transformation between the properties of a source schema and those of a target schema. To do this, elements are visually connected to each other through a graphical mapping interface. Functions can also be inserted between these elements to perform operations such as:

  • string concatenation
  • numerical calculations
  • value conversions
  • conditional transformations
  • filtering
  • array iteration
  • execution of XPath expressions or XSLT fragments

 

When the mapping is saved, the tool generates an XSLT transformation file that will be executed by the Logic Apps runtime. This tool therefore provides a graphical interface for building XSLT transformations without having to manually write the entire code.

 
 

Data Mapper, Data Operations and Transform XML

 

Several Logic Apps features may seem similar, but they address different needs.

 

mapping actiosn in Logic Apps

 

Data Operations actions, such as Select, Compose, Filter array, or Parse JSON, are suitable for relatively simple manipulations performed directly within a workflow.

The Data Mapper becomes more useful when:

  • messages have complex structures
  • the transformation needs to be reused
  • multiple levels of objects or arrays need to be converted
  • source and target structures are defined by formal contracts
  • transformation logic needs to be separated from workflow orchestration

 
In this article, we will explore the Transform using Data Mapper XSLT action, designed for mappings created with the Data Mapper. It should not be confused with the Transform XML action, which is intended for XSLT transformations created with other tools.

This distinction is important: a mapping generated by the Data Mapper must be called using the action dedicated to Data Mapper operations.

 

Prerequisites

To create a mapping, you need:

  • an Azure Logic Apps Standard project
  • Visual Studio Code
  • the Azure Logic Apps (Standard) extension
  • a source schema
  • a target schema
  • ideally, one or more sample input messages

 

Schemas can be provided as:

  • an XSD file for XML messages
  • a JSON schema describing a JSON structure

 

In the rest of this article, we will use two XSD files to illustrate a more advanced XML transformation.

 

Note about the OS

Officially, Microsoft states that the Data Mapper is supported in Visual Studio Code on Windows only. However, on macOS, it is possible to use the graphical editor to create and modify mappings through workarounds.

However, the native Test Map feature available on Windows does not work natively on macOS because it depends on a Windows-specific .NET Framework component. It is still possible to test transformations locally using the Logic Apps testing SDK and .NET tests.

For more details, see: Workaround: Testing Logic Apps Data Mapper Maps on macOS – DEV Community

 
 

Example: transforming an order for an ERP

 
To illustrate the Data Mapper with a more realistic use case, let’s take the example of a company called MyCompany. This company receives e-commerce orders in XML format and needs to transform them into a format expected by its ERP.

The source flow contains the following data:

  • a message header
  • an order
  • a customer
  • two addresses
  • multiple order lines
  • shipping costs
  • discounts
  • a total amount

 

However, MyCompany‘s ERP expects a different format, structured as follows:

  • a document header
  • a partner section
  • an address section
  • ERP lines
  • a financial summary
  • additional attributes

 

In our case, the solution therefore consists of using a Logic App Standard with the Data Mapper to transform the source format into the target format.

Why use the Data Mapper here? Because it is not limited to connecting simple fields. It can also handle nested structures, collections, value conversions, calculations, and conditional rules.

The transformation must therefore perform several mapping operations. In the Data Mapper tool, these transformation rules are represented graphically by connections between source and target nodes, using intermediate functions where necessary.

 

Integrating schemas into our Logic App

How to: Create Standard Workflows with Visual Studio Code – Azure Logic Apps | Microsoft Learn
https://learn.microsoft.com/en-us/azure/logic-apps/create-standard-workflows-visual-studio-code

The first step is to add the XSD data schemas that we are going to use.

These schemas will then be used by the Data Mapper to display the structure of the source message and that of the target message. They will make it possible to create mappings between the different XML elements.

 

intégration des schemas dans lap

 

Creating the mapping

In Visual Studio Code, open the Logic Apps Standard project, then go to the Data Mapper section of the Azure extension.

It is also possible to create a map from the workspace “Explorer” view. To do this, right-click the “Maps” folder, then select “Create Data Map”.

After entering the name of our new map, a Data Map creation interface will open. This interface mainly consists of three areas:

  • the source schema
  • the central area containing connections and functions
  • the target schema

 

Creation du mapping 1

 

Before we can apply our transformation rules, we need to specify the source and target schemas. Once this is done, you should find all the properties under “Source” and “Destination”:

 

Creation du mapping 2

 

On the left side of the interface, we find the list of functions provided by the Data Mapper. These functions can be used to build more complex transformations, such as concatenations, calculations, conditions, or value conversions.

Once the schemas are loaded, we can start creating the first mappings between source and target fields.

 

Creating a direct mapping

When no transformation is required, a source element can be directly connected to a target element. This type of mapping is suitable when both elements use compatible types.

To do this, select the source property, then draw a connection to the target property using drag and drop.

Here is the result with other direct mappings:

 

Creation du mapping direct

 

Using a function

The Data Mapper provides several types of functions. These include functions for performing conversions, manipulating arrays, applying conditions, or processing strings.
For example, let’s imagine that we have the following mapping rules:

 

Source Target Mapping
Order.Customer.Type Partner.PartnerCategory Conversion B2CCONSUMER, B2BBUSINESS
Order.Customer.FirstName + Order.Customer.LastName Partner.DisplayName Concatenation for an individual customer
Order.Customer.CompanyName Partner.DisplayName Used if the customer is of type B2B

 

The result could look like this:

 

Use Functions 1

 

With:

  • 1.A: we check whether “Order.Customer.Type” is equal to “B2C”. The result of this evaluation is a boolean.
  • 2.A: if the previous evaluation is true, we return the value “CONSUMER”
  • 1.B and 2.B: we apply the same logic with the values “B2B” and “BUSINESS”
  • 3: we then use an “if else” condition to populate “Partner.PartnerCategory”. If the customer is of type “B2C”, we return “CONSUMER”. Otherwise, we return “BUSINESS”
  • 4: we concatenate “Order.Customer.FirstName” and “Order.Customer.LastName”
  • 5: we use an “if else” condition to determine the value of “Partner.DisplayName”. If the customer is of type “B2B”, we return “Order.Customer.CompanyName”. Otherwise, we return the result of the concatenation between “Order.Customer.FirstName” and “Order.Customer.LastName”

 
Using functions makes it possible to keep transformation logic within the mapping rather than multiplying intermediate actions in the workflow.

 

Mapping arrays

To transform lines into items, the parent elements of both arrays must be connected.

The Data Mapper then adds the required iteration logic. However, the internal properties still need to be explicitly mapped.

For example, we want to create a mapping to OrderLines.OrderLine.LineAmount:

 

Source Target Mapping
Lines.Line.QuantityLines.Line.UnitPriceLines.Line.DiscountAmount OrderLines.OrderLine.LineNetAmount Lines.Line.Quantity x Lines.Line.UnitPrice – Lines.Line.DiscountAmount

 

Use Functions 2

 

A connection is automatically created between the parent elements of the collection.

 

Generated files

When saving, the Data Mapper creates two main artifacts:

  • Artifacts/MapDefinitions/ECommerceOrderToERPSalesOrder.lml
  • Artifacts/Maps/ECommerceOrderToERPSalesOrder.xslt

 

The .lml file contains the definition used by the visual editor.

The .xslt file contains the transformation executable by Logic Apps.

Both files must be kept in the Git repository. The .lml file makes it possible to continue visually editing the mapping, while the .xslt file is the artifact used at runtime. Schemas can also be stored in the following folder: Artifacts/Schemas.

This organization makes it easier to manage contracts and mappings within the same project as the workflows.

 

Files generated

 

Testing the mapping

Thanks to the Azure Logic Apps (Standard) extension, it is possible to test a map directly from Visual Studio Code. The Data Mapper includes a test panel where you can provide a sample source message.

Warning: before running the test, the mapping must be saved in order to regenerate the XSLT file with the latest changes.

The transformation result is then displayed directly in Visual Studio Code. This feature makes it possible to quickly test:

  • nominal values
  • optional properties
  • empty arrays
  • null values
  • special characters
  • conditional rules
  • different numeric and date formats

 

If an error occurs during testing, you should check the input XML message, the validity of the XSD schemas, and the local Logic Apps Standard runtime configuration.

 

Using the mapping in a workflow

Once the mapping has been saved, it can be called from the workflow designer. Add the built-in Transform using Data Mapper XSLT action.

 

use mapping in workflow

 

The action mainly requires:

  • the content to transform;
  • the mapping source;
  • the name of the XSLT file.

 

use mapping in workflow

 

In a local project, simply select the file located in the Artifacts/Maps folder.

The result of this action can then be passed to the next steps in the workflow, for example to a Service Bus topic.

 

Deployment via YAML pipelines

In a Logic App Standard, local artifacts can be deployed with the application and its workflows.

For a deployment using a YAML pipeline, the Logic App Standard project is first packaged as a ZIP archive and then published as a pipeline artifact. This archive contains the elements required by the map, including the .lml, .xslt, and schema files.

Here is a code example:

 

- task: AzureLogicAppsStandardBuild@1
  displayName: 'Azure Logic Apps Standard Build'
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)/MyLAppStd.ProjectName/MyLAppStdName'
    deploymentFolder: '$(System.DefaultWorkingDirectory)/deployment/MyLAppStd.ProjectName/'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    deploymentWorkflowParametersFile: '$(Build.SourcesDirectory)/MyLAppStd.ProjectName/MyLAppStd.ProjectName/parameters.json'
- task: PublishPipelineArtifact@1
  displayName: 'Publish logic app zip artifact'
  inputs:
    targetPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    artifact: 'MyArtifactName'
    publishLocation: 'pipeline'

 

Deploying a Logic App Standard is done in two steps:

  1. Deploying the Logic App Standard resource, for example using an Infrastructure as Code approach with Bicep, Terraform, or an ARM Template
  2. Deploying the code, which contains the workflows, parameters, and artifacts required for execution

 

The code can be deployed once the project has been built and the artifact published. The ZIP archive can then be deployed to the target resource.
Here is a code example showing how to do this:

 

- job: Deployment_LogicApp
  displayName: "Deploy Logic App"
  steps:
    - task: DownloadPipelineArtifact@2
      displayName: "Download LogicApp Artifact"
      inputs:
        artifact: 'MyArtifactName'
        path: $(Pipeline.Workspace)
    - task: AzureFunctionApp@1
      displayName: "Deploy logic app workflows"
      inputs:
        azureSubscription: "MyAZureSubscription"
        appType: "functionAppLinux"
        appName: "my-lapp-std-dev"
        package: "$(Pipeline.Workspace)/MyArtifactName"
        deploymentMethod: "zipDeploy"

 

Ultimately, using the Data Mapper does not add any specific deployment step. However, it adds artifacts that must be included in the Logic App Standard package.

 
 

Best practices

 

Version schemas and mappings

Schema files, .lml files, and .xslt files must be placed under source control.

A schema modification can have a direct impact on multiple mappings. These changes should therefore be treated as interface contract evolutions.

 

Treat XSLT as a generated artifact

When the transformation is managed with the Data Mapper, it is preferable to modify the .lml file from the visual editor and then regenerate the XSLT.

A manual modification to the generated file may be lost the next time the mapping is saved.

For more specific requirements, the Data Mapper makes it possible to integrate XSLT fragments or use custom functions.

 
 

Current limitations

 
At the time of writing this article, several limitations need to be taken into account:

  • the Data Mapper is limited to Logic Apps Standard projects
  • the editor is available in Visual Studio Code, but not in the Azure portal
  • the Test Map feature is not natively available on macOS
  • CSV schemas are not supported

 
These limitations do not call into question the value of the tool, but they should be considered before choosing the Data Mapper for a complex transformation.

 
 

Conclusion

 
The Data Mapper brings a visual transformation experience to Azure Logic Apps Standard that is particularly useful for structured integration scenarios.

It makes it possible to separate conversion rules from orchestration, work from schemas, test transformations locally, and version artifacts alongside the rest of the project, which is also an advantage.

It is particularly well suited to teams working with complex XML or JSON contracts, but can also be used when modernizing an integration platform based on BizTalk Server, for example.

For simple transformations, Data Operations actions often remain sufficient. However, when message structures become complex or when the mapping represents a true integration contract, the Data Mapper provides a more readable, testable, and maintainable solution.