c# - TFS 获取具有关系和子项的项目
问题描述
我需要一些有关 Microsoft TFS 的帮助。(或VSTS,如果我错了,请纠正我)
对于给定的项目,我想获得它的所有关系和子项。我能够获得关系,但据我了解不是孩子(例如给定积压下的所有任务,以及所有相关的任务/错误等)。最终,我想呈现一棵树(或带有所有关系的 graphQL 样式显示)。
这是我的课的一部分:
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.TeamFoundation.Client;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
public TfsDataProvider(string tfsInstanceUrl, string tfsCollection)
{
TfsInstanceUrl = tfsInstanceUrl.TrimEnd('/');
TfsCollection = tfsCollection;
TfsUrlPlusCollection = string.Format("{0}/{1}", tfsInstanceUrl, tfsCollection);
//tfs nuget packages for API version 3.2:
creds = new VssCredentials();
creds.Storage = new VssClientCredentialStorage();
Uri url = new Uri(TfsUrlPlusCollection); //"http://tfs:8080/tfs/aeronautics-100"
connection = new VssConnection(url, creds);
wiClient = connection.GetClient<WorkItemTrackingHttpClient>();
//tracker = new HashSet<int>();
}
public List<WorkItem> GetWorkItemsByIds(IEnumerable<int> ids)
{
var wis = wiClient.GetWorkItemsAsync(ids, null, null, WorkItemExpand.Relations).Result;
return wis;
}
上面的代码有效,我收到所有项目及其关系,然后我可以通过 id 获取关系并构建一种树来显示。我的问题是我不明白我怎样才能得到所有的孩子。
目前我想向这个函数发送一个 id 数组(或此时 1 个 id)并递归地获取它的所有子项和关系。似乎我只得到关系。
我使用的是 TFS 2017 版本,API 版本是 3.2。
解决方案
所有链接的工作项都包含在关系中,因此您的代码已经获取了子工作项。下一步是检查关系类型以确定哪个是相关工作项,哪个是子工作项。
foreach (WorkItem wi in wis)
{
if (wi.Relations != null)
{
foreach (WorkItemRelation wir in wi.Relations)
{
Console.WriteLine(wir.Rel);
Console.WriteLine(wir.Url);
}
}
}
链接类型:
Child: System.LinkTypes.Hierarchy-Forward
Parent: System.LinkTypes.Hierarchy-Reverse
Related: System.LinkTypes.Related
推荐阅读
- javascript - 如何使用映射和过滤器修改原始数组
- android - 在 React Native 中捕获图像之前,我们如何获取 exif 元数据信息
- arrays - 如何忽略此问题中的区分大小写?
- mysql - AWS 在通过 mysql 连接后无法看到 RDS mysql DB
- json - 如何将获取请求直接发送到 API?
- templates - 如何减小存储库大小?
- here-api - HERE api反向地理编码器不输出街道号码
- javascript - 积极的前瞻在浏览器的控制台中不起作用,但在 regxr.com 中起作用
- python - 将unicode更改为实际字符?
- python - 散景:所有子图的通用工具,无需固定 x 范围