11

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

目前,我们不得不为第一次调用期间所做的每个工作项进行第二次调用,并引入了性能问题。

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

4

2 回答 2

18

您在回答中提到的文章提供了一种使用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); 
                    }
                }
            }       
        }
    }
}
于 2012-05-25T15:37:08.083 回答
9

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

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

编辑:我还在我的博客上写了一篇关于这个的帖子。

于 2012-05-25T06:50:19.477 回答