Как перенести встроенные ссылки на другие рабочие элементы, указывающие на новые рабочие элементы проекта

У меня есть инструменты миграции Azure DevOps, и все выглядит так, как будто все работает правильно, за одним исключением. При переносе встроенных ссылок на рабочие элементы ссылка по-прежнему ссылается на старый проект, а не на новый. Я предполагаю, что мне не хватает какого-то атрибута, который сообщает инструменту о необходимости ссылаться на исходный проект, но я не могу найти указанный атрибут.

Пример: есть 2 проекта: "Тестовый исходный проект" и "Тестовый целевой проект". Когда "Тестовый исходный проект" переносится в "Тестовый целевой проект", ссылки в "Тестовом целевом проекте" по-прежнему ссылаются на исходную задачу в "Тестовый источник". Проект ". Ниже приведен снимок экрана, на который я ссылаюсь.

Я ожидаю, что ссылка будет: https://dev.azure.com/Company/Test%20Target%20Project/_workitems/edit/75

Но я получаю https://dev.azure.com/Company/Test%20Source%20Project/_workitems/edit/75


У меня версия 8.9, и вот моя конфигурация:

{
  "Version": "8.9",
  "TelemetryEnableTrace": false,
  "workaroundForQuerySOAPBugEnabled": false,
  "Source": {
    "Collection": "https://dev.azure.com/Company/",
    "Project": "Test Source Project",
    "ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
    "AllowCrossProjectLinking": false,
    "PersonalAccessToken": ""
  },
  "Target": {
    "Collection": "https://dev.azure.com/grda365/",
    "Project": "Test Target Project",
    "ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
    "AllowCrossProjectLinking": false,
    "PersonalAccessToken": ""
  },
  "FieldMaps": [],
  "WorkItemTypeDefinition": {
    "sourceWorkItemTypeName": "targetWorkItemTypeName"
  },
  "GitRepoMapping": null,
  "Processors": [
    {
      "ObjectType": "VstsSyncMigrator.Engine.Configuration.Processing.NodeStructuresMigrationConfig",
      "PrefixProjectToNodes": false,
      "Enabled": true,
      "BasePaths": []
    },
    {
      "ObjectType": "VstsSyncMigrator.Engine.Configuration.Processing.WorkItemMigrationConfig",
      "ReplayRevisions": true,
      "PrefixProjectToNodes": false,
      "UpdateCreatedDate": true,
      "UpdateCreatedBy": true,
      "UpdateSourceReflectedId": false,
      "BuildFieldTable": false,
      "AppendMigrationToolSignatureFooter": false,
      "QueryBit": "AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan')",
      "OrderBit": "[System.ChangedDate] desc",
      "Enabled": true,
      "LinkMigration": true,
      "AttachmentMigration": true,
      "AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
      "FixHtmlAttachmentLinks": false,
      "SkipToFinalRevisedWorkItemType": false,
      "WorkItemCreateRetryLimit": 5,
      "FilterWorkItemsThatAlreadyExistInTarget": false,
      "PauseAfterEachWorkItem": false,
      "AttachmentMazSize": 480000000,
      "CollapseRevisions": false
    },
    {
      "ObjectType": "VstsSyncMigrator.Engine.Configuration.Processing.WorkItemQueryMigrationConfig",
      "Enabled": true
    }
  ]
}

 

1 ответ

Решение

Инструмент не обновляет встроенные ссылки.

Это проблема реализации, поскольку мы выполняем переход путем итерации по всем существующим рабочим элементам. Для интегрированных ссылок мы можем просто добавить ссылки на рабочие элементы, существующие в целевом объекте, и он будет добавляться с обоих концов, как только будет добавлен другой элемент.

Например, если мы переносим 1, 2, 3 и 1, 2 ссылку 3, тогда:

  1. №1 перенесен, и ссылки не добавлены, так как №3 не существует
  2. №2 перенесен, и ссылки не добавлены, так как №3 не существует
  3. #3 переносится, и ссылки добавляются в #1 и #2

В момент добавления №3 и создания ссылок нет способа узнать, какие рабочие элементы имеют встроенные ссылки на какие-либо другие рабочие элементы.


Идеи для крепления

Хорошо, вот как сейчас работает инструмент, поэтому я придумываю исправление. Это может быть опция RefactorInlineLinks, которая анализирует любое обнаруженное описание и исправляет ссылку, если она попадает в область миграции.

Однако это будет работать только в качестве второго прохода после того, как миграция будет завершена, и все рабочие элементы, которые будут существовать, действительно существуют.

Другие вопросы по тегам