Azure DevOps Migration Tools

v16.2.1

Azure DevOps Migration Tools allow you to migrate Teams, Backlogs, Tasks, Test Cases, and Plans & Suites from one Project to another in Azure DevOps / TFS both within the same Organisation, and between Organisations.

Home
 › 
Learn
 › 
Overview
 › 
Reference
 › 
Tools
 › 
Fieldmappingtool
Overview

Tools : FieldMappingTool

Ref

  

Less than 1 minute to read

  

2025-06-19 13:46:05 +0000

Tool for applying field mapping transformations to work items during migration, supporting various field mapping strategies like direct mapping, regex transformations, and value lookups.

Options

Parameter name Type Description Default Value
Enabled Boolean If set to `true` then the tool will run. Set to `false` and the processor will not run. missing XML code comments
FieldMaps List Gets or sets the list of field mapping configurations to apply. missing XML code comments

Examples

sample

This is an example of what your config might look like once configured.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
    {
  "MigrationTools": {
    "Version": "16.0",
    "CommonTools": {
      "FieldMappingTool": {
        "Enabled": "True",
        "FieldMaps": [
          {
            "ApplyTo": [
              "Bug",
              "Task"
            ],
            "expression": "[effort] * [rate]",
            "FieldMapType": "FieldCalculationMap",
            "parameters": {
              "effort": "Custom.EstimatedHours",
              "rate": "Custom.HourlyRate"
            },
            "targetField": "Custom.EstimatedCost"
          },
          {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "FieldMapType": "FieldMergeMap",
            "formatExpression": "{0} \n {1}",
            "sourceFields": [
              "Custom.FieldA",
              "Custom.FieldB"
            ],
            "targetField": "Custom.FieldC"
          },
          {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "defaultValue": "New",
            "FieldMapType": "FieldValueMap",
            "sourceField": "System.State",
            "targetField": "System.State",
            "valueMapping": {
              "Active": "InProgress",
              "Closed": "Done",
              "Resolved": "InProgress"
            }
          },
          {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "defaultValue": "42",
            "FieldMapType": "FieldToFieldMap",
            "sourceField": "Microsoft.VSTS.Common.BacklogPriority",
            "targetField": "Microsoft.VSTS.Common.StackRank"
          }
        ],
        "FieldMapSamples": {
          "FieldCalculationMap": {
            "ApplyTo": [
              "Bug",
              "Task"
            ],
            "expression": "[effort] * [rate]",
            "FieldMapType": "FieldCalculationMap",
            "parameters": {
              "effort": "Custom.EstimatedHours",
              "rate": "Custom.HourlyRate"
            },
            "targetField": "Custom.EstimatedCost"
          },
          "FieldClearMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "targetField": "Custom.FieldC"
          },
          "FieldLiteralMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "targetField": "Custom.SomeField",
            "value": "New field value"
          },
          "FieldMergeMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "formatExpression": "{0} \n {1}",
            "sourceFields": [
              "Custom.FieldA",
              "Custom.FieldB"
            ],
            "targetField": "Custom.FieldC"
          },
          "FieldToFieldMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "defaultValue": "42",
            "sourceField": "Microsoft.VSTS.Common.BacklogPriority",
            "targetField": "Microsoft.VSTS.Common.StackRank"
          },
          "FieldToFieldMultiMap": {
            "ApplyTo": [
              "SomeWorkItemType",
              "SomeOtherWorkItemType"
            ],
            "SourceToTargetMappings": {
              "SourceField1": "TargetField1",
              "SourceField2": "TargetField2"
            }
          },
          "FieldToTagFieldMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "formatExpression": "{0} <br/><br/><h3>Acceptance Criteria</h3>{1}",
            "sourceFields": [
              "System.Description",
              "Microsoft.VSTS.Common.AcceptanceCriteria"
            ],
            "targetField": "System.Description"
          },
          "FieldToTagMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "formatExpression": "ScrumState:{0}",
            "sourceField": "System.State"
          },
          "FieldValueMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "defaultValue": "StateB",
            "sourceField": "System.State",
            "targetField": "System.State",
            "valueMapping": {
              "StateA": "StateB"
            }
          },
          "FieldValueToTagMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "formatExpression": "{0}",
            "pattern": "Yes",
            "sourceField": "Microsoft.VSTS.CMMI.Blocked"
          },
          "MultiValueConditionalMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "sourceFieldsAndValues": {
              "Field1": "Value1",
              "Field2": "Value2"
            },
            "targetFieldsAndValues": {
              "Field1": "Value1",
              "Field2": "Value2"
            }
          },
          "RegexFieldMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "pattern": "PRODUCT \\d{4}.(\\d{1})",
            "replacement": "$1",
            "sourceField": "COMPANY.PRODUCT.Release",
            "targetField": "COMPANY.DEVISION.MinorReleaseVersion"
          },
          "targetFieldsAndValues": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "targetField": "Custom.ReflectedWorkItemId"
          },
          "TreeToTagMap": {
            "ApplyTo": [
              "SomeWorkItemType"
            ],
            "timeTravel": "1",
            "toSkip": "3"
          }
        }
      }
    }
  }
}
    

defaults

These are the default values for this configuration. If you do not set it in your config the default always applies. You can overide by adding a diferent value in your config.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    {
  "MigrationTools": {
    "Version": "16.0",
    "CommonTools": {
      "FieldMappingTool": {
        "Enabled": "False",
        "FieldMapDefaults": {
          "ApplyTo": [
            "*"
          ]
        },
        "FieldMaps": null
      }
    }
  }
}
    

classic

We have moved to a new config format, and you will need to update your old configs. This entry is a strate seralisation of the object and is here for legacy, and may provide value for debugging issues.

1
2
3
4
5
6
    {
  "$type": "FieldMappingToolOptions",
  "Enabled": true,
  "FieldMaps": []
}
    

...
Getting Support

Community Support

Question & Discussion - The first place to look for usage, configuration, and general help.

Commercial Support

We provide training, ad-hoc support, and full service migrations through Azure DevOps Migration Services