【问题标题】:How to restore WorkItem states after losing states by moving them to a different project如何在丢失状态后通过将它们移动到不同的项目来恢复 WorkItem 状态
【发布时间】:2021-02-05 16:12:00
【问题描述】:

借助 Azure DevOps 服务,我们拆分了我们的主项目并将 ~1500 个 WorkItems/PBI/Features/... 移至一个新项目。

我们编写了一个 Boards->查询,选择了所有并将它们移到新项目中。

通过这样做,WorkItem 的所有状态都被重置(ActivatedBy、ActivatedDate、State、Board Column)。 我们可以通过查看“修订”选项卡来查看旧状态。

有没有办法或工具来恢复或撤消该移动所做的更改?

【问题讨论】:

  • 嗨,您是否有机会查看以下解决方法。进展如何?
  • 嗨@LeviLu-MSFT。我们没有使用您建议的工具。我们目前正在编写一个基于 danielorns 方法的简单 api 工具。谢谢你的大回答。我非常肯定,这将对社区有用。

标签: azure-devops


【解决方案1】:

moving the work item to a new project 创建工作项的新修订版时。

项目之间的移动更加复杂,因为不能保证使用相同的流程,这意味着即使您移动到相同类型的 fields 也可能会丢失/添加或应用了其他 rules。因此,Azure DevOps 会自动将 State 和 Reason 字段重置为您移动的工作项类型的默认初始值。

您需要做的是检查所有已移动的工作项并将字段恢复为先前版本的值。这可以手动完成,但是通过 Rest API(或 Azure CLI)自动完成 1500 个工作项可能是您更好的选择:

  1. 通过wiql 搜索选择所有这些工作项,获取已移动的 ID 列表。(Rest APIAzure CLI
  2. 在工作项被移动之前获取修订。请特别注意asOf/--as-of 参数,该参数允许您从给定日期检索工作项修订。将其设置为就在您从原始项目迁移之前。 (Rest API, Azure CLI)
  3. 使用以前的值更新相关字段(这将在工作项上创建一个新修订并有效地“恢复”您丢失的字段(Rest APIAzure CLI

使用 Azure CLI 可能更简单一些,但 REST API 提供了 retrieving workitems in batchupdate workitems in batch 之类的功能来优化流程,但仅适用于 1500 个几乎无关紧要的项目。

【讨论】:

    【解决方案2】:

    没有简单的方法可以恢复更改的字段。

    如果您打算使用 rest api 来恢复更改的字段。你可以使用下面的rest api。

    1,你可以使用Wiql - Query By Wiqlrest api 来获取你所有的工作项目,如 danielorn 提到的。见this thread for example如何编写脚本调用wiql rest api。

    2、拿到所有工作项后。您可以通过rev 字段获取它们的当前版本。然后你可以使用Revisions - Get rest api通过当前的rev - 1获取之前版本的原始字段值。

    3,然后你可以使用update rest api来恢复工作项。

    但是,使用Azure DevOps Migration Tools 迁移您的工作项有一个更简单的解决方案。

    首先,您可以删除从主项目移至新项目的所有工作项。

    然后,您可以使用 Azure DevOps 迁移工具重新迁移工作项。请仔细查看文档以了解如何使用此工具。见下例:

    1、创建自定义迁移跟踪字段

    在使用迁移工具之前。您需要为新项目中的工作项类型创建自定义迁移跟踪字段。此字段将用于跟踪主项目中的原始工作项。在您的项目过程中查看here to add a custom field

    然后您可以在configraton.json中设置自定义跟踪字段(即ReflectedWorkItemId2),如下所示:

    迁移完成后。您将看到在自定义字段中设置了源工作项 url:

    2,在FieldMaps部分映射字段和值(例如区域路径,迭代路径)。请参见下面的示例。

        {
          "$type": "MultiValueConditionalMapConfig",
          "WorkItemTypeName": "*",
          "sourceFieldsAndValues": {
            "System.AreaPath": "MainProject\\Development Team"
           
          },
          "targetFieldsAndValues": {
            "System.AreaPath": "NewProject"
            
          }
        },
        
        {
          "$type": "FieldValueMapConfig",
          "WorkItemTypeName": "*",
          "sourceField": "System.IterationPath",
          "targetField": "System.IterationPath",
          "defaultValue": "TestProjectAccess",
          "valueMapping": {
            "MainProject\\iteration 3": "NewProject\\Iteration 3",
            "MainProject\\iteration 5": "NewProject\\Iteration 2"
          }
        }
    

    3,映射状态

    {
          "$type": "FieldValueMapConfig",
          "WorkItemTypeName": "*",
          "sourceField": "System.State",
          "targetField": "System.State",
          "defaultValue": "New",
          "valueMapping": {
            "Approved": "New",
            "New": "New",
            "Developing": "Active",
            "To Do": "New",
            "Done": "Closed",
            "Removed": "Removed"
          }
        },
    

    4,您可以在WorkItemMigrationConfig 处理器中的WIQLQueryBit 字段仅迁移您想要的工作项。

    "Processors": [
        {
          "$type": "WorkItemMigrationConfig",
          "Enabled": true,
          ....
          "AppendMigrationToolSignatureFooter": false,
          "WIQLQueryBit": "AND [System.Id] IN (5,9)",
          "WIQLOrderBit": "[System.ChangedDate] desc",
          ...
         }
      ]
    

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多