Azure devops extensions 有没有办法合并字段而不将doneMatch添加到字段中?
我们需要将两个字段合并为一个字段。在配置中,有一个“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
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));
}
}