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

Pra*_*abu 11 .net tfs-sdk tfs2010 c#-4.0

有没有人知道是否可以使用他们的TFS API Web服务在TFS的一次旅行中检索工作项及其链接的工作项列表?

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

如果不是这样,有没有办法在不检索它们的情况下查看链接工作项的类型(例如,查看它是一项任务还是问题)?

pan*_*lif 17

你在答案中提到的那篇文章提出了一种使用WIQL来完成你所做的事情的方法.当然,这不是一个糟糕的选择.

在我看来,更好的另一种方法是简单地以图形方式生成产生您所追求的结果的查询.您可能需要一个简单的"工作项和直接链接":
在此输入图像描述

一旦你保存了,你将能够:

  1. 在VS&Team Web Access中打开查询
  2. 使用Excel绑定查询并在Excel中处理WI
  3. 使用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); 
                    }
                }
            }       
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*abu 10

找到一篇关于这个问题的文章.

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

编辑:我也在我的博客上写了一篇关于此的帖子.

  • 链接已经失效(现在都是 404)。这就是为什么您需要在答案中至少添加一个最小的代码示例。 (3认同)