Azure DevOps API WIQL获取最大工作项ID

标签 azure api rest wiql

我正在使用 WIQL 查询 Azure DevOps 中的工作项列表。但是,Azure DevOps 将在单个查询中最多返回 20000 个工作项。如果查询结果包含超过 20000 个项目,则返回错误代码而不是工作项目。为了获取与我的查询匹配的所有工作项的列表,我修改了查询以过滤我的 ID,然后循环构建具有多个查询的工作项列表。问题是,显然没有办法知道我何时到达循环末尾,因为我不知道系统中的最大工作项 ID。

idlist = []
max_items_per_query = 19000
counter = 0
while not done:
  wiql = ("SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] IN ('User Story','Bug') 
  AND [System.AreaPath] UNDER 'mypath' AND System.ID >= count AND System.ID < counter + max_items".format(counter, counter + max_items_per_query))

  url = base_url+'wiql'
  params = {'api-version':'4.0'}
  body = {'query':wiql}

  request = session.post(url, auth=('',personal_access_token), params=params, json=body)

  response = request.json()
  newItems = [w['id'] for w in response['workItems']]
  idlist.extend(newItems)

  if not newItems:
    done = True

这在大多数情况下都有效,但如果在指定区域路径下的工作项 ID 中遇到间隙,循环会提前退出。理想情况下,如果有一种方法可以查询系统中的最大工作项 ID,然后在计数器达到该值时使用该数字退出,我就可以完成这项工作。但是,我找不到办法做到这一点。有没有办法查询这个数字或可能有其他解决方案,使我能够获得符合特定条件的所有工作项目的列表?

最佳答案

您可以使用$top参数来获取最后一个。

如下所示(这只是示例 - 您可以将其扩展到您的查询)

SELECT [System.Id] FROM workitems WHERE [System.Id] > 0 ORDER BY [System.Id] DESC with $top = 1

这将返回最大系统 ID - 因为它按降序排列。

建议:

您还可以更改您的逻辑,如下所示:

SELECT [System.Id] FROM workitems WHERE [System.Id] > 0 ORDER BY [System.Id] ASC with $top = 5000

获取第 5000 个项目 System.Id ,我们假设它是 5029

下一个查询是:

SELECT [System.Id] FROM workitems WHERE [System.Id] > 5029 ORDER BY [System.Id] ASC with $top = 5000

您将获得从系统 ID-5029 开始的接下来 5000 个项目。

你可以循环上面的逻辑。

对于循环的退出情况,您可以检查作为迭代的一部分返回的项目数 - 如果它小于5000,则迭代结束。

关于Azure DevOps API WIQL获取最大工作项ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66306723/

相关文章:

azure - 使用 Powershell 创建 Azure Flask

node.js - Windows Azure 网站上运行的是哪个版本的 node.js?

mysql - 规范化该数据库的最佳方法是什么?

amazon-web-services - AWS 上是否允许带有正文的 Get 请求?来自 CloudFront 的 403 错误

java - HTTP 协议(protocol)对 POST 请求/响应正文有效负载的最大限制是多少。通过 REST 发送 JSON

php - 使用外部 API 访问时,Python Bottle API 无 Json 响应

azure - 如何使用 Rest API 更新 Azure Devops 中管道的 'Default agent pool for YAML'?

c# - 从 HttpTrigger 函数读取 Azure IoT 中心遥测

c# - 如何安全地将 API 凭据存储在 GitHub 上共享的 C# 文件中?

java - Swift 和 REST API 身份验证