2012-05-25 71 views
11

是否有人知道是否可以使用他們的TFS API網站從TFS一次旅程中檢索工作項目列表及其鏈接工作項目服務?使用TFS API在單個查詢中檢索工作項目及其鏈接的工作項目

目前,我們不得不第二次打電話給第一次打電話的每個工作項目,並且正在引入一個性能問題。

如果這不可能,是否有辦法查看鏈接工作項的類型而不檢索它們(例如,查看它是否是任務或問題)?

回答

9

發現有關此問題的article

它允許您使用樹形查詢,您可以在其中獲取父項ID和它的鏈接項ID在一個查詢中。使用這個,可以使用第二個查詢來獲取實際的詳細工作項目對象。兩個查詢來解決問題。

編輯:我也在我的博客上寫了一個關於這個的post

16

您在回答中提到的article提供了使用WIQL來完成您的操作的方法。當然,不是一個錯誤的選擇。

在我看來,更好的另一種方法是簡單地生成圖形化的查詢,以產生您之後的結果。你可能需要一個簡單的「工作項目和直接鏈接」:
enter image description here

一旦你保存你馬上就能到:

  1. 打開在VS &團隊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); 
        } 
       } 
      }  
     } 
    } 
} 
+0

是有保存查詢有任何性能優勢?我還有需要檢索的「第三」圖層上的項目,但我仍然無法想象如何去做。也就是說,錯誤鏈接到與需求工作項目鏈接的測試用例。 –

+0

從TFS中檢索查詢應該具有性能損失。儘管如此,這將是最小的。主要的收穫是您可以在VS中查看結果並輕鬆而一致地維護結果。另一種選擇(在控制檯應用程序中使用硬編碼的WIQL字符串)可能從長遠來看證明維護性較差。 – pantelif

+0

您提到的'第三'級別無法通過VS中的可視化生成的查詢訪問,但您可以使用C#來完成。 – pantelif

相關問題