2014-09-18 2 views
8

Ich versuche, ein Projektberichtstool in WPF/C# zu schreiben. Ich möchte auf alle Projektnamen auf unserem TFS (Team Foundation Server) zugreifen und dann Statistiken für jedes Arbeitselement in einem bestimmten Projekt anzeigen.Wie kann ich eine Liste von Arbeitselementen aus TFS in C# abrufen?

Ich habe die Projektnamen, aber die tatsächlichen Arbeitsaufgaben zu bekommen ist, was mir eine harte Zeit gibt. Hier ist, was ich bisher habe:

public const string tfsLocation = "http://whatever"; 

// get the top list of project names from the team foundation server 
public List<string> LoadProjectList() 
{ 
    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation)); 
    var workItemStore = new WorkItemStore(tpc); 
    var projects = (from Project project in workItemStore.Projects select project.Name).ToList(); 

    return projects; 
} 

public string GetProjectInfo(string targetProject) 
{ 
    string info = String.Empty; 

    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation)); 
    var workItemStore = new WorkItemStore(tpc); 

    foreach (Project project in workItemStore.Projects) 
    { 
     if (project.Name == targetProject) 
     { 
      info += String.Format("Project: {0}\n\n", project.Name); 

      info += "Work Item Types:\n"; 
      foreach (WorkItemType item in project.WorkItemTypes) 
      { 
       info += String.Format("- {0}\n", item.Name); 
       info += String.Format(" - Description: {0}\n", item.Description); 
       info +=    " - Field Definitions:\n"; 

       foreach (FieldDefinition field in item.FieldDefinitions) 
       { 
        info += String.Format("  - {0}\n", field.Name); 
       } 
       info += "\n"; 
      } 
     } 
    } 

    return info; 
} 

GetProjectInfo sendet einige hilfreiche Informationen über das zurück, was in jedem Projekt ist, aber bisher sieht es aus wie ich nur sehen die Definitionen dessen, was die Workitems bestehen, und nicht die tatsächlichen WorkItems selbst. Ich denke, dass die Programmierung, die ich geschrieben habe, am falschen Ort ist.

Von Microsofts Definition von WorkItem, (http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.aspx) es sieht aus wie es in WorkItemTracking.Client ist, aber nicht in den WorkItemStor, und ich bin mir nicht sicher, wohin ihn geht zuzugreifen.

FINAL VERSION:

Hier ist die aktualisierte Version meiner Funktion, nachdem die unten Antwort verweist. Dies gibt nur eine lange Folge von Arbeitselementnamen mit neuen Zeilen dazwischen zurück, um auszudrucken, was alles ist, was ich versuche zu arbeiten (für jetzt).

public string GetProjectInfo(string targetProject) 
{ 
    string info = String.Empty; 

    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation)); 
    WorkItemStore workItemStore = new WorkItemStore(tpc); 

    Query query = new Query(workItemStore, "SELECT * FROM WorkItems WHERE [System.TeamProject] = @project", new Dictionary<string, string>() { { "project", targetProject } }); 

    WorkItemCollection wic = query.RunQuery(); 

    foreach (WorkItem item in wic) 
    { 
     info += String.Format("{0}\n", item.Title); 
    } 

    return info; 
} 
+0

Ich stimme es ab, klingt interessant. Hilf jemandem dabei zu arbeiten. – mybirthname

Antwort

10

Sie müssen WIQL-Abfragen verwenden, um aktuelle Arbeitsaufgaben zu erhalten, die Sie interessieren, z. um alle Arbeitsaufgaben für ein bestimmtes Projekt zu bekommen:

using Microsoft.TeamFoundation.WorkItemTracking.Client; 

Query query = new Query(
    workItemStore, 
    "select * from issue where System.TeamProject = @project", 
    new Dictionary<string, string>() { { "project", project.Name } } 
); 

var workItemCollection = query.RunQuery(); 
foreach(var workItem in workItemCollection) 
{ 
    /*Get work item properties you are interested in*/ 
    foreach(var field in workItem.Fields) 
    { 
     /*Get field value*/ 
     info += String.Format("Field name: {0} Value: {1}\n", field.name, field.Value); 
    } 
} 
+0

und bedenken Sie, dass es verschiedene Methoden für Flat-Abfragen und hierarchische –

+0

Ich werde dies überprüfen und sehen, ob ich es zum Laufen bringen kann. Vielen Dank. –

+0

Sie verwendeten "aus Problem", aber sollte es nicht "von WorkItems" sein? Was bedeutet "Bezug"? –

Verwandte Themen