Field To Field Multi Map

The Field To Field Multi Map enables efficient batch mapping of multiple field pairs in a single configuration, allowing you to map several source fields to their corresponding target fields simultaneously.

Last updated: September 10, 2025 | Edit this page | Discuss this page
top

Overview

The Field To Field Multi Map provides an efficient way to configure multiple field-to-field mappings in a single field map definition. Instead of creating separate field maps for each field pair, this map allows you to specify multiple source-to-target field mappings in one configuration block.

This field map is particularly useful when you have many fields that need direct one-to-one mapping and want to simplify your configuration structure.

missing XML code comments

top

How It Works

The Field To Field Multi Map processes multiple field mappings:

  1. Configuration Processing: Reads the source-to-target field mapping dictionary
  2. Batch Execution: For each work item, processes all field pairs in the mapping
  3. Individual Field Mapping: Applies standard field-to-field logic for each pair
  4. Value Copying: Copies values from each source field to its corresponding target field
top

Use Cases

This field map is ideal for:

  • Bulk Field Migration: Moving many related fields between systems
  • Process Template Changes: Adapting multiple fields when changing process templates
  • Organization Migration: Mapping standard fields across different Azure DevOps organizations
  • Schema Standardization: Aligning field names across different projects
  • Configuration Simplification: Reducing the number of field map configurations needed
top

Configuration Structure

Parameter
Type
Required
Description
Default Value
Parameter:
ApplyTo
Type:
List
Required:
false
Description:
A list of Work Item Types that this Field Map will apply to. If the list is empty it will apply to all Work Item Types. You can use “*” to apply to all Work Item Types.
Default:
missing XML code comments
Parameter:
Enabled
Type:
Boolean
Required:
false
Description:
If set to true then the Fieldmap will run. Set to false and the processor will not run.
Default:
missing XML code comments
Parameter:
SourceToTargetMappings
Type:
Dictionary
Required:
false
Description:
missing XML code comments
Default:
missing XML code comments
top

Sample

{
  "MigrationTools": {
    "Version": "16.0",
    "CommonTools": {
      "FieldMappingTool": {
        "FieldMaps": [
          {
            "FieldMapType": "FieldToFieldMultiMap",
            "ApplyTo": [
              "SomeWorkItemType",
              "SomeOtherWorkItemType"
            ],
            "SourceToTargetMappings": {
              "SourceField1": "TargetField1",
              "SourceField2": "TargetField2"
            }
          }
        ]
      }
    }
  }
}
top

Defaults

{
  "MigrationTools": {
    "Version": "16.0",
    "CommonTools": {
      "FieldMappingTool": {
        "FieldMaps": [
          {
            "FieldMapType": "FieldToFieldMultiMap",
            "ApplyTo": [
              "*"
            ]
          }
        ]
      }
    }
  }
}
top

Basic Example

{
  "FieldMapType": "FieldToFieldMultiMap",
  "ApplyTo": ["Bug", "Task"],
  "SourceToTargetMappings": {
    "Microsoft.VSTS.Common.Priority": "Microsoft.VSTS.Common.Priority",
    "Microsoft.VSTS.Common.Severity": "Microsoft.VSTS.Common.Severity",
    "System.AssignedTo": "System.AssignedTo",
    "System.AreaPath": "System.AreaPath",
    "System.IterationPath": "System.IterationPath"
  }
}
top

Cross-Organization Migration

{
  "FieldMapType": "FieldToFieldMultiMap",
  "ApplyTo": ["User Story"],
  "SourceToTargetMappings": {
    "Microsoft.VSTS.Scheduling.StoryPoints": "Microsoft.VSTS.Scheduling.Effort",
    "Microsoft.VSTS.Common.BusinessValue": "Custom.BusinessValue",
    "Microsoft.VSTS.Common.AcceptanceCriteria": "System.Description",
    "Custom.LegacyField1": "Custom.NewField1",
    "Custom.LegacyField2": "Custom.NewField2"
  }
}
top

Custom Field Batch Migration

{
  "FieldMapType": "FieldToFieldMultiMap",
  "ApplyTo": ["*"],
  "SourceToTargetMappings": {
    "Custom.OldCategory": "Custom.NewCategory",
    "Custom.OldOwner": "Custom.NewOwner", 
    "Custom.OldStatus": "Custom.NewStatus",
    "Custom.OldPriority": "Custom.NewPriority"
  }
}
top

Benefits Over Individual Field Maps

top

Configuration Efficiency

  • Single field map handles multiple field pairs
  • Reduced configuration file size
  • Easier maintenance and updates
top

Performance Considerations

  • Optimized execution for batch operations
  • Single field map instance processes multiple fields
  • Reduced overhead compared to many individual maps
top

Management Simplification

  • Related field mappings grouped together
  • Easier to understand migration scope
  • Simplified testing and validation
top

Field Processing Rules

top

Source Field Handling

  • Each source field is processed independently
  • Missing source fields are skipped without errors
  • Null or empty values are copied as-is
top

Target Field Assignment

  • Target fields are set with source field values
  • Existing target values are overwritten
  • String conversion is applied automatically
top

Error Handling

  • Individual field mapping failures don’t affect other pairs
  • Non-existent fields are logged and skipped
  • Processing continues for valid field pairs
top

Best Practices

top

Field Grouping

  • Group related fields in single multi-map configurations
  • Use separate multi-maps for different functional areas
  • Consider work item type specificity for field availability
top

Configuration Organization

  • Document the purpose of each field mapping group
  • Use meaningful naming conventions for clarity
  • Test field mappings with sample data
top

Performance Optimization

  • Use multi-maps for batches of simple field-to-field mappings
  • Avoid mixing simple and complex mapping logic
  • Consider target system field validation requirements
top

Common Patterns

top

Standard System Fields

{
  "FieldMapType": "FieldToFieldMultiMap",
  "ApplyTo": ["*"],
  "SourceToTargetMappings": {
    "System.Title": "System.Title",
    "System.Description": "System.Description",
    "System.State": "System.State",
    "System.Reason": "System.Reason",
    "System.AssignedTo": "System.AssignedTo"
  }
}
top

Process Template Migration

{
  "FieldMapType": "FieldToFieldMultiMap", 
  "ApplyTo": ["Bug"],
  "SourceToTargetMappings": {
    "Microsoft.VSTS.TCM.ReproSteps": "Microsoft.VSTS.TCM.ReproSteps",
    "Microsoft.VSTS.Common.Priority": "Microsoft.VSTS.Common.Priority",
    "Microsoft.VSTS.Common.Severity": "Microsoft.VSTS.Common.Severity",
    "Microsoft.VSTS.TCM.SystemInfo": "Microsoft.VSTS.TCM.SystemInfo"
  }
}
top

Schema

This is the JSON schema that defines the structure and validation rules for this configuration.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://devopsmigration.io/schema/schema.fieldmaps.fieldtofieldmultimap.json",
  "title": "FieldToFieldMultiMap",
  "description": "missing XML code comments",
  "type": "object",
  "properties": {
    "ApplyTo": {
      "description": "A list of Work Item Types that this Field Map will apply to. If the list is empty it will apply to all Work Item Types. You can use \"*\" to apply to all Work Item Types.",
      "type": "array"
    },
    "Enabled": {
      "description": "If set to `true` then the Fieldmap will run. Set to `false` and the processor will not run.",
      "type": "boolean"
    },
    "SourceToTargetMappings": {
      "description": "missing XML code comments",
      "type": "object"
    }
  }
}
Documentation