Azure Devops Rest Api Получить рабочие задания и задачи команды текущего спринта - PullRequest
1 голос
/ 28 апреля 2020

Я собираюсь создать несколько инструментов для запроса текущих рабочих элементов спринта команды. Я не уверен, как это сделать, учитывая организацию, проект и команду. Кажется, я могу получить текущую итерацию, выполнив этот вызов:

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"
            }
        ]
    }

Так что я могу получить указатель на спринт текущей команды, но как вы возвращаете все рабочие элементы спринта и задачи внутри них?

Я не вижу здесь никакой информации:

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

Спасибо!

РЕДАКТИРОВАТЬ:

Итак, я нашел запрос Work Item Query Language (WIQL ... почему бы не угадать), который работает, когда я вызываю его в 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)

Возвращает этот красивый результат в пользовательском интерфейсе: enter image description here

Но когда я пытаюсь сделать это через 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)"
}

Я получаю ответ в следующем виде:

{
    "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"
            }
        },
        ...

Таким образом, похоже, что он не возвращает столбцы, которые я указываю в моем WIQL, и мне придется развернуться и запросить API рабочих элементов для каждого идентификатор рабочего элемента, возвращенный из этого запроса. Я хотел бы не делать 20+ повторных звонков для разрешения нужных мне данных. Есть ли лучший подход?

Спасибо

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете использовать 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

Из результатов, приведенных ниже, видно, что возвращаются необходимые столбцы рабочих элементов.

enter image description here

Проверка примеров в документе Запрос связанных рабочих элементов Для запроса связанных рабочих элементов.

Надеюсь, что выше помогает!

...