【问题标题】:Get all work items from a project azure devops REST API从项目中获取所有工作项 azure devops REST API
【发布时间】:2020-11-11 05:26:05
【问题描述】:

我正在使用 Azure devops API 通过 AWS Lambda node.js 创建一个通知机器人。此时我需要检查每个任务工作项是否附加到父用户故事。

第一步是获取“给定”项目的所有任务工作项,对于这一步,我正在阅读 azure devops api 文档并发现:Work Items - List

API 正在询问我想要获取的工作项的 ID,但是如果我需要“给定”项目中的所有工作项怎么办?

GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems?ids={ids}&api-version=5.1

或者有没有其他方法可以从给定项目中获取所有工作项 ID?

【问题讨论】:

    标签: azure-devops azure-devops-rest-api


    【解决方案1】:

    您可以使用不需要 id 但结果中的最大工作项为 200 个的 Work Items - Get Work Items Batch API。

    但是,如果您需要检查任务,为什么需要获取项目中的所有工作项?您只能使用Wiql - Query By Wiql API 获取任务:

    POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1
    

    在正文中进行查询:

    {
      "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task'"
    }
    

    【讨论】:

    • 如何发出这个 POST 请求?我正在使用 Python 并且有一个 PAT ......无法弄清楚这一点。 PAT 会去哪里?
    • 不了解 Python,但在 Node 中,我们将 PAT 作为 Authorization 标头传递
    【解决方案2】:

    进一步了解 Shayki 关于使用 WIQL 查询的回应,我建议您可以通过执行工作项链接查询来查找没有父用户故事的任务:

    POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1

    请求负载:

    {
      "query": "SELECT [System.Id] FROM workitemLinks WHERE ([Source].[System.WorkItemType] = 'Task') AND ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse') AND ([Target].[System.WorkItemType] = 'User Story') MODE (DoesNotContain)"
    }
    

    这样,您不必遍历每个工作项来检查它是否有父项。

    注意:WIQL 查询将返回的结果限制为 20K,如果查询导致的工作项多于该数量,则返回错误。使用上述查询的进一步原因(如果适用)。

    【讨论】:

      【解决方案3】:

      有一个C#的客户端:

              public IEnumerable<int> GetIdList()
              {
                  var connection = new VssConnection(new Uri("http://yourazuredevopsurl/"), new VssBasicCredential(string.Empty, personalAccessToken));
                  var workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();
                  var wiql = new Wiql
                  {
                      Query =  $@"Select [System.Id] From WorkItems Where [System.WorkItemType] = 'Test Case'"
                  };
                  
                  var worItemsIds = workItemTrackingHttpClient.QueryByWiqlAsync(wiql, "Project name").Result;
      
                  return worItemsIds.WorkItems.Select(reference => reference.Id);
      

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 2020-01-18
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-28
        • 1970-01-01
        相关资源
        最近更新 更多