.net 使用TFSAPI在单个查询中检索工作项及其链接的工作项

.net 使用TFSAPI在单个查询中检索工作项及其链接的工作项,.net,c#-4.0,tfs-sdk,.net,C# 4.0,Tfs Sdk,是否有人知道是否可以使用TFS API web服务从TFS一次检索工作项列表及其链接的工作项 目前,我们必须对第一次调用期间生成的每个工作项进行第二次调用,并引入性能问题 如果不可能,是否有一种方法可以在不检索链接工作项的情况下查看链接工作项的类型(例如,查看它是否是任务或问题)?找到了有关此问题的答案 它允许您使用树查询,您可以在一个查询中获得父项ID及其链接项ID。使用此方法,可以使用第二个查询来获取实际的详细工作项对象。解决此问题的两个查询 编辑:我也在我的博客上写了一篇关于这一点的文章。

是否有人知道是否可以使用TFS API web服务从TFS一次检索工作项列表及其链接的工作项

目前,我们必须对第一次调用期间生成的每个工作项进行第二次调用,并引入性能问题

如果不可能,是否有一种方法可以在不检索链接工作项的情况下查看链接工作项的类型(例如,查看它是否是任务或问题)?

找到了有关此问题的答案

它允许您使用树查询,您可以在一个查询中获得父项ID及其链接项ID。使用此方法,可以使用第二个查询来获取实际的详细工作项对象。解决此问题的两个查询

编辑:我也在我的博客上写了一篇关于这一点的文章。

你在回答中提到的方法提供了一种实现你所追求的目标的方法,即使用。当然,这是一个不错的选择。

另一种方法,在我看来,更好的方法是简单地以图形方式生成查询,从而生成您想要的结果。您可能需要一个简单的“工作项和直接链接”:


保存后,您将能够:

  • 在VS和Team Web Access中打开查询(&T)
  • 将查询与Excel绑定并从Excel中处理WIs
  • 使用TFS-API捕获查询结果。
  • 对于后一部分,假设您的查询名为“MyLinkedQuery”,并且它位于TeamProject“MyProj”的“团队查询”下,您可以这样做:

    using System;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    
    namespace LinkedQueryResults
    {
        class Program
        {
            static void Main()
            {
                TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSURL"));
    
                var workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore));
    
                var project = workItemStore.Projects["MyProj"];
                QueryHierarchy queryHierarchy = project.QueryHierarchy;
                var queryFolder = queryHierarchy as QueryFolder;
                QueryItem queryItem = queryFolder["Team Queries"];
                queryFolder = queryItem as QueryFolder;
    
                if (queryFolder != null)
                {
                    var myQuery = queryFolder["MyLinkedQuery"] as QueryDefinition;
                    if (myQuery != null)
                    {
                        var wiCollection = workItemStore.Query(myQuery.QueryText);
                        foreach (WorkItem workItem in wiCollection)
                        {
                            Console.WriteLine(workItem.Title); 
                        }
                    }
                }       
            }
        }
    }
    

    保存查询是否有任何性能优势?我还需要检索“第三”层上的项目,但我仍然不知道如何检索。也就是说,链接到测试用例(链接到需求工作项)的bug。事实上,从TFS检索查询应该有性能损失。但这将是最低限度的。主要的好处是,您可以在VS结果中可视化并轻松一致地维护它。另一个选项(在你的控制台应用程序中有一个硬编码的WIQL字符串)从长远来看可能不太容易维护。你提到的“第三级”无法通过VS中可视化生成的查询访问,但你当然可以用C#实现。我决定在应用程序中使用硬编码的WIQL,特别是因为我需要访问第三级项目。我以前之所以不能这样做,是因为项目链接的方向。(a-->b链接已损坏(现在都是404)。这就是为什么您需要在答案中至少添加一个最小的代码示例。