Dot-Net

使用 TFS API 在單個查詢中檢索工作項及其連結的工作項

  • January 16, 2017

有誰知道是否可以使用他們的 TFS API Web 服務從 TFS 一次旅行中檢索工作項列表及其連結的工作項?

目前,我們不得不為第一次呼叫期間所做的每個工作項進行第二次呼叫,並且引入了性能問題。

如果這不可能,有沒有辦法在不檢索它們的情況下查看連結工作項的類型(例如查看它是任務還是​​問題)?

找到一篇關於這個問題的文章。

它允許您使用樹查詢,您可以在其中獲取父項 id 及其在一個查詢中的連結項 id。使用它,可以使用第二個查詢來獲取實際的詳細工作項對象。解決問題的兩個查詢。

編輯:我還在我的部落格上寫了一篇關於這個的文章。

您在回答中提到的文章提供了一種使用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); 
                   }
               }
           }       
       }
   }
}

引用自:https://stackoverflow.com/questions/10748412