使用TFS API在单个查询中检索工作项及其链接的工作项

时间:2012-05-25 04:20:30

标签: .net c#-4.0 tfs2010 tfs-sdk

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

目前,我们不得不为第一次通话期间制作的每个工作项进行第二次调用,并且正在引入性能问题。

如果不是这样,是否可以在不检索链接工作项的情况下查看链接工作项的类型(例如,查看它是任务还是问题)?

2 个答案:

答案 0 :(得分:17)

您在答案中提及的article提供了一种方法,可以使用WIQL执行您之后的操作。当然,这不是一个糟糕的选择。

另一种方式,在我看来更好的方法是简单地以图形方式生成查询,从而产生您之后的结果。您可能需要一个简单的"工作项目和直接链接":enter image description here

一旦您已经保存了您,您将会这样做能够:

  1. 在VS&中打开查询Team Web Access
  2. 使用Excel& amp;从Excel中开展WI工作
  3. 使用TFS-API捕获查询结果。
  4. 对于后一部分,假设您的查询被命名为" MyLinkedQuery"它位于" Team Queries"通过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); 
                        }
                    }
                }       
            }
        }
    }
    

答案 1 :(得分:9)

找到关于此问题的article

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

编辑:我还在我的博客上写了一篇post