从项目中获取所有工作项 azure devops REST API
Get all work items from a project azure devops REST API
我正在使用 Azure devops API 通过 AWS Lambda node.js 创建一个通知机器人。此时我需要检查每个任务工作项是否附加到父用户故事。
第一步是获取“给定”项目上的所有任务工作项,对于这一步,我正在阅读 azure devops api 文档并发现:Work Items - List
API 正在询问我想要获取的工作项的 ID,但是如果我需要“给定”项目中的所有工作项怎么办?
GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems?ids={ids}&api-version=5.1
或者是否有任何其他方法可以从给定项目中获取所有工作项 ID?
您可以使用不需要 ID 的 Work Items - Get Work Items Batch API,但结果中的最大工作项为 200。
但是,如果你需要检查任务,为什么你需要获取所有项目中的工作项?你只能得到任务, Wiql - Query By Wiql API:
POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1
在正文中进行查询:
{
"query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task'"
}
为了进一步说明 Shayki 关于使用 WIQL 查询的回应,我建议您可以通过执行工作项链接查询来查找没有父用户故事的任务:
POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1
请求负载:
{
"query": "SELECT [System.Id] FROM workitemLinks WHERE ([Source].[System.WorkItemType] = 'Task') AND ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse') AND ([Target].[System.WorkItemType] = 'User Story') MODE (DoesNotContain)"
}
这样,您就不必遍历每个工作项来检查它是否有父项。
注意:WIQL 查询将返回的结果限制为 20K,returns 如果查询产生的工作项多于此,则会出现错误。使用上述查询的进一步原因(如果适用)。
有一个 C# 客户端:
public IEnumerable<int> GetIdList()
{
var connection = new VssConnection(new Uri("http://yourazuredevopsurl/"), new VssBasicCredential(string.Empty, personalAccessToken));
var workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();
var wiql = new Wiql
{
Query = $@"Select [System.Id] From WorkItems Where [System.WorkItemType] = 'Test Case'"
};
var worItemsIds = workItemTrackingHttpClient.QueryByWiqlAsync(wiql, "Project name").Result;
return worItemsIds.WorkItems.Select(reference => reference.Id);
我正在使用 Azure devops API 通过 AWS Lambda node.js 创建一个通知机器人。此时我需要检查每个任务工作项是否附加到父用户故事。
第一步是获取“给定”项目上的所有任务工作项,对于这一步,我正在阅读 azure devops api 文档并发现:Work Items - List
API 正在询问我想要获取的工作项的 ID,但是如果我需要“给定”项目中的所有工作项怎么办?
GET https://dev.azure.com/{organization}/{project}/_apis/wit/workitems?ids={ids}&api-version=5.1
或者是否有任何其他方法可以从给定项目中获取所有工作项 ID?
您可以使用不需要 ID 的 Work Items - Get Work Items Batch API,但结果中的最大工作项为 200。
但是,如果你需要检查任务,为什么你需要获取所有项目中的工作项?你只能得到任务, Wiql - Query By Wiql API:
POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1
在正文中进行查询:
{
"query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task'"
}
为了进一步说明 Shayki 关于使用 WIQL 查询的回应,我建议您可以通过执行工作项链接查询来查找没有父用户故事的任务:
POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1
请求负载:
{
"query": "SELECT [System.Id] FROM workitemLinks WHERE ([Source].[System.WorkItemType] = 'Task') AND ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse') AND ([Target].[System.WorkItemType] = 'User Story') MODE (DoesNotContain)"
}
这样,您就不必遍历每个工作项来检查它是否有父项。
注意:WIQL 查询将返回的结果限制为 20K,returns 如果查询产生的工作项多于此,则会出现错误。使用上述查询的进一步原因(如果适用)。
有一个 C# 客户端:
public IEnumerable<int> GetIdList()
{
var connection = new VssConnection(new Uri("http://yourazuredevopsurl/"), new VssBasicCredential(string.Empty, personalAccessToken));
var workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();
var wiql = new Wiql
{
Query = $@"Select [System.Id] From WorkItems Where [System.WorkItemType] = 'Test Case'"
};
var worItemsIds = workItemTrackingHttpClient.QueryByWiqlAsync(wiql, "Project name").Result;
return worItemsIds.WorkItems.Select(reference => reference.Id);