问题描述
我们在Azure DevOps中有一个简单的查询,该查询在某个迭代路径中查找所有工作项,并在Web GUI中运行时,返回System.Id,System.WorkItemType,System.Title,System.AssignedTo,System。标签和System.Parent。通过使用以下形式的API调用:
https://dev.azure.com/ // _ apis / wit / wiql /
我可以获得查询返回的列的列表以及指向每个工作项的链接。链接不包含来自列的信息。大概,我应该接受每个工作项链接并形成一个wiql查询,该查询将返回我想要的信息。通常,这不是问题(除了我不熟悉wiql),但是我们会将这些信息提取到Azure数据工厂中,以提交到sql数据库并与其他来源的工作信息相关联。 ADF可以从Rest API提取到数据库(我见过,但仍在学习...),但似乎最好(或仅可能)通过单个查询而不是一个一组基于初始查询结果的查询。
所以,我的问题是:是否有对Azure DevOps的单个API调用,它将针对每个工作项返回与查询关联的工作项信息?也就是说,我想要一个查询,而不是告诉我每个工作项的Id,WorkItemType等,而不是一个必须提供给另一个查询以获取所需信息的可循环列表。
解决方法
恐怕只有一个rest api无法返回查询中的工作项信息。
通过rest api,您可以获取查询设置(工作项字段)和工作项id,您需要与另一个API结合以获取工作项信息。
这是我的PowerShell示例:
$token = "PAT"
$url=" https://dev.azure.com/{OrganizationName}/{ProjectName}/{Team}/_apis/wit/wiql/{QueryId}?api-version=5.1"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$IDS = $response.workItems.id -join ','
$Fieldnames = $response.columns.referenceName -join ','
echo $IDs
echo $Fieldnames
$url1="https://dev.azure.com/{OrganizationName}/_apis/wit/workitems?ids=$IDs&fields=$Fieldnames&api-version=6.0"
$response2 = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method Get
echo $($response2 | ConvertTo-Json -Depth 100)
说明:
First Rest API:Wiql - Get用于获取查询设置和IDS。我们可以从响应中获取ID和字段,并形成一个字符串。
Second Rest API:Work Items - List用于获取工作项信息,您可以在URL中添加字段和ID,然后可以获得具有目标字段的工作项。
结果: