首页 > 解决方案 > 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。

标签: c#tfsvisual-studio-2017

解决方案


所有链接的工作项都包含在关系中,因此您的代码已经获取了子工作项。下一步是检查关系类型以确定哪个是相关工作项,哪个是子工作项。

    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

推荐阅读