查询多个项目中的lastChanged工作项

时间:2020-10-06 08:19:52

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

我正在尝试创建一个查询,该查询向我提供最近两天内已更新的所有用户故事,这在使用WorkItem Batch Query的项目中应该是非常基本的。 https:// [TENNANT] .analytics.visualstudio.com / [PROJECT] /_odata/v1.0/WorkItems 我将需要更新一些设置了某些标准集的用户故事(现在无法使用DevOps中的规则进行估算的计算)

我的挑战是我们有200个项目,而我需要获得所有这些项目中最新更改的用户故事。所以我目前的解决方案如下:

  1. 对分页为100的项目进行查询(现在有3个查询)
  2. 使用200的分页查询用户故事(目前有207个查询)
  3. 遍历所有用户故事并根据需要更新计算(平均每天大约20次)

所有查询将运行大约11分钟,然后由于Azure DevOps REST Api上的限制阈值而失败。

有没有一种方法可以查询租户中所有项目中的用户故事,或者查询自那时以来已更改用户故事的项目? 项目的LastChanged与底层元素无关,但与项目元数据有关。

很高兴能找到所有解决方案的提示:)

2 个答案:

答案 0 :(得分:1)

有没有一种方法可以查询我们所有项目中的用户故事? 租户,还是查询自此以来用户故事已更改的项目?

您可以尝试Azure Devops Rest Api Query By Wiql,以便可以通过WIQL syntax自定义逻辑。

在特定项目中返回User Stories which have been changed within the last two days的简单请求:

Post https://dev.azure.com/{OrgName}/_apis/wit/wiql?api-version=6.1-preview.2

如果要查询组织内的所有项目,请请求正文:

{
  "query": "Select [System.Id] From WorkItems WHERE [System.WorkItemType]='User Story' AND [System.ChangedDate] >= @today-2 ORDER BY [System.ChangedDate] DESC"
}

请求正文,如果您要查询组织内的特定项目:

{
  "query": "Select [System.Id] From WorkItems WHERE [System.WorkItemType]='User Story' AND [System.ChangedDate] >= @today-2 And ([System.TeamProject] = 'ProjectName1' OR [System.TeamProject] ='ProjectName2') ORDER BY [System.ChangedDate] DESC"
}

答案 1 :(得分:0)

作为第一个问题的跟进。我可以从所有项目中获得Wit-ID的列表,但无法从其他字段中获得值。

查询:

{
      "query": "Select [System.Id], [System.Title] From WorkItems WHERE [System.WorkItemType]='User Story' AND [System.ChangedDate] >= @today ORDER BY [System.ChangedDate] DESC"
}

响应:

{
    "queryType": "flat",
    "queryResultType": "workItem",
    "asOf": "2020-10-12T13:21:32.76Z",
    "columns": [
        {
            "referenceName": "System.Id",
            "name": "ID",
            "url": "https://dev.azure.com/[organization]/_apis/wit/fields/System.Id"
        },
        {
            "referenceName": "System.Title",
            "name": "Title",
            "url": "https://dev.azure.com/[organization]/_apis/wit/fields/System.Title"
        }
    ],
    "sortColumns": [
        {
            "field": {
                "referenceName": "System.ChangedDate",
                "name": "Changed Date",
                "url": "https://dev.azure.com/[organization]/_apis/wit/fields/System.ChangedDate"
            },
            "descending": true
        }
    ],
    "workItems": [
        {
            "id": 19548,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19548"
        },
        {
            "id": 19551,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19551"
        },
        {
            "id": 13786,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/13786"
        },
        {
            "id": 19299,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19299"
        },
        {
            "id": 10805,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/10805"
        },
        {
            "id": 19346,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19346"
        },
        {
            "id": 19347,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19347"
        },
        {
            "id": 19348,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19348"
        },
        {
            "id": 19349,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19349"
        },
        {
            "id": 19546,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19546"
        },
        {
            "id": 19340,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19340"
        },
        {
            "id": 19341,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19341"
        },
        {
            "id": 19342,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19342"
        },
        {
            "id": 19345,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19345"
        },
        {
            "id": 17226,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/17226"
        },
        {
            "id": 19006,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19006"
        },
        {
            "id": 19544,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19544"
        },
        {
            "id": 7412,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/7412"
        },
        {
            "id": 19540,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/19540"
        },
        {
            "id": 18352,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/18352"
        },
        {
            "id": 11609,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/11609"
        },
        {
            "id": 11636,
            "url": "https://dev.azure.com/[organization]/_apis/wit/workItems/11636"
        }
    ]
}

System.Title不是答复的一部分,由于请求URL中的项目要求,并且这些项目涉及多个项目,因此我无法使用标准的WIT批处理查询。

是否有办法从WiQL查询中获取比ID字段更多的信息?我已经尝试了所有想法,但是无法找到一种方法来查询我从每个工作项中获得的更多字段,作为对第一次查询的响应。

我这里缺少什么吗?