Azure devops extensions 有没有办法合并字段而不将doneMatch添加到字段中?

Azure devops extensions 有没有办法合并字段而不将doneMatch添加到字段中?,azure-devops-extensions,azure-devops-migration-tools,Azure Devops Extensions,Azure Devops Migration Tools,我们需要将两个字段合并为一个字段。在配置中,有一个“doneMatch”特殊字符串,它似乎被附加到合并字段中。为什么需要这样做,有没有办法不将其附加到目标字段 例如,我有: src.fieldA=“城市” src.fieldB=“状态” 我想将这两个字段合并到target.fieldA中作为“城市:州”。然而,我最终得到的是“城市:州########”我可以更改配置文件,使其使用不同的doneMatch,但不能为null或空。。因此,如果我将其更改为“;”,则生成的字段将是“City:State

我们需要将两个字段合并为一个字段。在配置中,有一个“doneMatch”特殊字符串,它似乎被附加到合并字段中。为什么需要这样做,有没有办法不将其附加到目标字段

例如,我有:
src.fieldA=“城市”
src.fieldB=“状态”

我想将这两个字段合并到target.fieldA中作为“城市:州”。然而,我最终得到的是“城市:州########”我可以更改配置文件,使其使用不同的doneMatch,但不能为null或空。。因此,如果我将其更改为“;”,则生成的字段将是“City:State;”。由于某种原因,我必须有一个结束字符/字符串。这是用来干什么的?如果我将字段与较新的更新同步,它是否会检测到target.fieldA中以前的########并认为它已完成合并,因此不会进行任何新的更改


是否有人可以向我发送有关此功能的更多信息?

使用Azure Devops迁移工具测试字段合并,我也可以重现这种情况。
configuration.json
文件中需要
doneMatch
字段(默认情况下为#####)

似乎无法避免将
donematch
添加到目标字段。因为我不是这个工具的开发者,所以我不确定这个字段的功能

我想分享一个解决这个问题的方法

解决方法:

您可以尝试将
设置为
doneMatch
字段。(
“doneMatch”:“

例如:

 "FieldMaps": [
    {
      "ObjectType": "VstsSyncMigrator.Engine.Configuration.FieldMap.FieldMergeMapConfig",
      "WorkItemTypeName": "*",
      "sourceField1": "System.Description",
      "sourceField2": "Microsoft.VSTS.Common.AcceptanceCriteria",
      "targetField": "System.Description",
      "formatExpression": "{0} {1}",
      "doneMatch": " "
    }
由于配置文件是一个Json文件,因此可以使用
来表示空间

结果:

它是否要检测target.fieldA和 认为它已经完成了合并,所以不会进行任何新的更改

根据我的测试,目标字段中的
######
不会影响其他操作。你仍然可以在这个领域进行操作

更新:

上述方法只能用于字段类型:
Text(多行)
。如果字段是其他类型,则此方法不起作用

您可以创建一个新字段(
文本(多行)
)。然后可以将目标字段设置为新字段

e、 g


我已经更新了v9.0.1的代码,它改变了FieldMerge的工作方式。它不再使用doneMatch,而是要求所有3个字段都不同,如果已经完成,则跳过

 if (source.Fields.Contains(config.sourceField1) && source.Fields.Contains(config.sourceField2))
            {
                var val1 = source.Fields[config.sourceField1].Value != null ? source.Fields[config.sourceField1].Value.ToString() : string.Empty;
                var val2 = source.Fields[config.sourceField2].Value != null ? source.Fields[config.sourceField2].Value.ToString() : string.Empty;
                var valT = target.Fields[config.targetField].Value != null ? target.Fields[config.targetField].Value.ToString() : string.Empty;
                var newValT = string.Format(config.formatExpression, val1, val2);

                if (valT.Equals(newValT))
                {
                    Trace.WriteLine(string.Format("  [SKIP] field already merged {0}:{1}+{2} to {3}:{4}", source.Id, config.sourceField1, config.sourceField2, target.Id, config.targetField));
                } else
                {
                    target.Fields[config.targetField].Value = string.Format(config.formatExpression, val1, val2) + config.doneMatch;
                    Trace.WriteLine(string.Format("  [UPDATE] field merged {0}:{1}+{2} to {3}:{4}", source.Id, config.sourceField1, config.sourceField2, target.Id, config.targetField));
                }

            }

对不起,我应该在大约一周或更短的时间内收到反馈。没关系。我将等待您的反馈。请随时告诉我进展情况。如果您仍然有问题,我也可以给您一些帮助。不幸的是,它实际上是将“ ”作为字符串,并将其附加到字段。Hi@Sclieu Yu。我再次测试了它,答案只能在
文本(多行)
字段中使用。请检查更新。您可以创建一个新字段并将其设置为目标字段。好的,我刚刚签出了它,并且doneMatch是测试已经发生的合并的糟糕方法。。。。我正在调查。
 if (source.Fields.Contains(config.sourceField1) && source.Fields.Contains(config.sourceField2))
            {
                var val1 = source.Fields[config.sourceField1].Value != null ? source.Fields[config.sourceField1].Value.ToString() : string.Empty;
                var val2 = source.Fields[config.sourceField2].Value != null ? source.Fields[config.sourceField2].Value.ToString() : string.Empty;
                var valT = target.Fields[config.targetField].Value != null ? target.Fields[config.targetField].Value.ToString() : string.Empty;
                var newValT = string.Format(config.formatExpression, val1, val2);

                if (valT.Equals(newValT))
                {
                    Trace.WriteLine(string.Format("  [SKIP] field already merged {0}:{1}+{2} to {3}:{4}", source.Id, config.sourceField1, config.sourceField2, target.Id, config.targetField));
                } else
                {
                    target.Fields[config.targetField].Value = string.Format(config.formatExpression, val1, val2) + config.doneMatch;
                    Trace.WriteLine(string.Format("  [UPDATE] field merged {0}:{1}+{2} to {3}:{4}", source.Id, config.sourceField1, config.sourceField2, target.Id, config.targetField));
                }

            }