2012-05-25 4 views
11

Weiß jemand, ob es möglich ist, eine Liste von Arbeitsaufgaben und deren niere Artikel in einer Reise von TFS mit ihren TFS API Web abrufen Dienstleistungen?Abrufen von Arbeitsaufgaben und deren verknüpfte Workitems in einer einzigen Abfrage die TFS-APIs

Im Moment müssen wir für jedes Arbeitselement, das während des ersten Anrufs erstellt wurde, einen zweiten Anruf tätigen und führen ein Performance-Problem ein.

Wenn das nicht möglich ist, gibt es eine Möglichkeit, den Typ des verknüpften Arbeitselements zu sehen, ohne sie abzurufen (z. B. ob es sich um eine Aufgabe oder ein Problem handelt)?

Antwort

9

Gefunden eine article in Bezug auf dieses Problem.

Es ermöglicht Ihnen, eine Baumabfrage zu verwenden, wo Sie die IDs des übergeordneten Elements und die IDs der verknüpften Elemente in einer Abfrage abrufen können. Damit kann eine zweite Abfrage verwendet werden, um die eigentlichen detaillierten Workitem-Objekte zu erhalten. Zwei Abfragen, um das Problem zu lösen.

Edit: Ich schrieb auch eine post darüber in meinem Blog.

16

Die article Sie beziehen sich auf in Ihrer Antwort präsentiert mit einer Methode zu tun, was Sie wollen, mit WIQL. Sicherlich keine schlechte Wahl.

Eine andere Möglichkeit, meiner Meinung nach, ist es, einfach die Abfrage grafisch zu erzeugen, die die Ergebnisse liefert, nach denen Sie suchen. Sie müssen wahrscheinlich ein einfaches "Work Items und Direct Link":
enter image description here

Sobald du gerettet habe, dass Sie in der Lage sein werde:

  1. Öffnen Sie die Abfrage in VS & Team Web Access-
  2. Krawatte die Abfrage mit Excel & Arbeit an WIs aus Excel
  3. Erfassen Sie die Abfrageergebnisse mit TFS-API.

Für den letzten Teil wird Ihre Abfrage angenommen „MyLinkedQuery“ genannt und es befindet sich unter „Team Queries“ von Teamproject „MyProj“, Sie so etwas tun kann:

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

Sind Gibt es irgendwelche Leistungsvorteile beim Speichern der Abfrage? Ich habe auch Gegenstände auf einer "dritten" Ebene, die ich abrufen muss, was ich immer noch nicht herausfinden konnte. Das heißt, Fehler, die mit Testfällen verknüpft sind, die mit dem Arbeitselement der Anforderung verknüpft sind. –

+0

Abrufen der Abfrage von TFS sollte tatsächlich eine Leistungseinbuße haben. Dies wäre jedoch minimal. Der Hauptvorteil besteht darin, dass Sie die Ergebnisse in VS visualisieren und einfach und konsistent pflegen können. Die andere Option (mit einer hartcodierten WIQL-Zeichenfolge in Ihrer Konsolen-App) könnte sich auf lange Sicht als weniger wartbar erweisen. – pantelif

+0

Die dritte Ebene, die Sie erwähnen, ist von visuell generierten Abfragen in VS nicht erreichbar, aber Sie können es sicherlich mit C# tun. – pantelif

Verwandte Themen