0

2 つのフィールドを 1 つにマージする必要があります。構成には、「doneMatch」という特別な文字列があり、これはマージされたフィールドに追加されるようです。なぜこれが必要なのですか? また、ターゲット フィールドにも追加しないようにする方法はありますか?

たとえば、私は持っています:
src.fieldA = "City"
src.fieldB = "State"

これらの 2 つのフィールドを「City: State」として target.fieldA にマージしたいと考えています。ただし、最終的には「City: State##DONE##」になります。別の doneMatch を使用するように構成ファイルを変更できますが、null または空にすることはできません。 "の場合、結果のフィールドは "City: State;" になります。何らかの理由で文字/文字列を終了する必要があります。これは何に使われますか?フィールドを新しい更新で同期している場合、target.fieldA で以前の ##DONE## を検出し、既にマージが完了していると見なすので、新しい変更は行われませんか?

この機能に関する詳細情報を誰かに送ってもらえますか?

4

2 に答える 2

1

FieldMerge の動作方法を変更する v9.0.1 のコードを更新しました。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));
                }

            }

https://github.com/nkdAgility/azure-devops-migration-tools/pull/529

于 2020-08-13T11:44:18.937 に答える