Azure Devops Rest Api 获取团队当前 Sprint 的工作项和任务

cob*_*nks 4 azure-devops azure-devops-rest-api

我正在寻找构建一些工具来查询团队冲刺的当前工作项目。我不确定如何在给定组织、项目和团队的情况下做到这一点。我似乎可以通过拨打此电话来获取当前迭代:

https://dev.azure.com/ {org}/{project}/{{team}/_apis/work/teamsettings/iterations?$timeframe=current&api-version=5.1

它返回类似这样的内容:

 {
        "count": 1,
        "value": [
            {
                "id": "8c15e886-ece7-49ce-ab5a-4090aefb5ce2",
                "name": "Sprint 1",
                "path": "Red Kitten Matrix\\Sprint 1",
                "attributes": {
                    "startDate": null,
                    "finishDate": null,
                    "timeFrame": "current"
                },
                "url": "https://dev.azure.com/chrisdevopsprojects/e8d05711-3014-4ba7-82b7-ab6829c455dc/aed68f47-9035-4af5-9b0d-b0c19b4e9e9e/_apis/work/teamsettings/iterations/8c15e886-ece7-49ce-ab5a-4090aefb5ce2"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

因此,我可以获得当前团队冲刺的指针,但是如何返回其中的所有冲刺工作项和任务?

我在这里没有看到任何信息:

https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/work%20items/list?view=azure-devops-rest-5.1

谢谢!

编辑:

因此,我找到了一种工作项查询语言(WIQL...为什么不猜测)查询,当我在 UI 中的 DevOps 中调用它时,它可以工作,并且可以通过其余 API 进行工作,但它会让我做一个一堆 ajax 请求将所有内容拉回来。请告诉我是否有更简单的方法来获得这个。

这是我的 WIQL:

SELECT
    [System.Id],
    [System.WorkItemType],
    [System.Title],
    [System.AssignedTo],
    [System.State],
    [System.Tags]
FROM workitemLinks
WHERE
    (
        [Source].[System.TeamProject] = @project
        AND [Source].[System.WorkItemType] <> 'Task'
        AND [Source].[System.State] <> ''
        AND [Source].[System.IterationPath] = @currentIteration('[Red Kitten Matrix]\Red Kitten Matrix Team <id:aed68f47-9035-4af5-9b0d-b0c19b4e9e9e>')
    )
    AND (
        [Target].[System.TeamProject] = @project
        AND [Target].[System.WorkItemType] <> ''
    )
ORDER BY [System.Id]
MODE (MayContain)
Run Code Online (Sandbox Code Playgroud)

它在 UI 中返回这个漂亮的结果: 在此输入图像描述

但是,当我尝试通过此端点通过 api 执行此操作时: https://dev.azure.com/chrisdevopsprojects/Red%20Kitten%20Matrix/Red%20Kitten%20Matrix%20Team/_apis/wit/wiql ?api-version= 5.1

发布此正文:

{
    "query": "SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM workitemLinks WHERE ( [Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] <> 'Task'        AND [Source].[System.State] <> '' AND [Source].[System.IterationPath] = @currentIteration('[Red Kitten Matrix]\\Red Kitten Matrix Team'))  AND ([Target].[System.TeamProject] = @project        AND [Target].[System.WorkItemType] <> '' ) ORDER BY [System.Id] MODE (MayContain)"
}
Run Code Online (Sandbox Code Playgroud)

我得到的响应是这样的:

{
    "queryType": "oneHop",
    "queryResultType": "workItemLink",
    "asOf": "2020-04-28T03:00:48.353Z",
    "columns": [
        {
            "referenceName": "System.Id",
            "name": "ID",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.Id"
        },
        {
            "referenceName": "System.WorkItemType",
            "name": "Work Item Type",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.WorkItemType"
        },
        {
            "referenceName": "System.Title",
            "name": "Title",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.Title"
        },
        {
            "referenceName": "System.AssignedTo",
            "name": "Assigned To",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.AssignedTo"
        },
        {
            "referenceName": "System.State",
            "name": "State",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.State"
        },
        {
            "referenceName": "System.Tags",
            "name": "Tags",
            "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.Tags"
        }
    ],
    "sortColumns": [
        {
            "field": {
                "referenceName": "System.Id",
                "name": "ID",
                "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.Id"
            },
            "descending": false
        },
        {
            "field": {
                "referenceName": "System.Id",
                "name": "ID",
                "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/fields/System.Id"
            },
            "descending": false
        }
    ],
    "workItemRelations": [
        {
            "rel": null,
            "source": null,
            "target": {
                "id": 6,
                "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/workItems/6"
            }
        },
        {
            "rel": "System.LinkTypes.Hierarchy-Forward",
            "source": {
                "id": 6,
                "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/workItems/6"
            },
            "target": {
                "id": 10,
                "url": "https://dev.azure.com/chrisdevopsprojects/_apis/wit/workItems/10"
            }
        },
        ...
Run Code Online (Sandbox Code Playgroud)

因此,看起来它没有返回我在 WIQL 中指定的列,我必须转身并查询工作项 api,以获取从此查询返回的每个工作项 ID。我希望避免进行 20 多次休息调用来解析我想要的数据。有更好的方法吗?

谢谢

Lev*_*SFT 5

您可以使用OData API查询工作项数据。https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}

对于 powershell 脚本中的以下示例:

$ourl = "https://analytics.dev.azure.com/{AzureOrganizationName}/{ProjectName}/_odata/v3.0-preview/WorkItems?`$filter=Iteration/IterationPath eq 'iterationName\iteration 5' and WorkItemType ne 'Task'&`$expand=Children(`$filter=WorkItemType ne '')&`$select=WorkItemId, Title, State" 

$full="Personal access token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($full)"))

$result = Invoke-RestMethod -Uri $ourl -Method Get -Header @{Authorization = "Basic $base64AuthInfo"} 
$result.value
Run Code Online (Sandbox Code Playgroud)

从下面的返回结果中可以看到,返回了所需的工作项列。

在此输入图像描述

检查文档中的示例查询链接的工作项查询链接的工作项。

希望以上有帮助!