2014-09-18 16 views
8

Sto provando a scrivere uno strumento per la segnalazione di progetti in WPF/C#. Voglio accedere a tutti i nomi dei progetti sul nostro TFS (Team Foundation Server), quindi visualizzare le statistiche per ciascun elemento di lavoro in un determinato progetto.Come posso recuperare un elenco di workitems da TFS in C#?

Ho i nomi dei progetti, ma ottenere gli elementi di lavoro effettivi è ciò che mi sta dando dei problemi. Ecco quello che ho finora:

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 restituisce un po 'di informazioni utili su quello che c'è in ogni progetto, ma finora sembra che io sto vedendo solo le definizioni di quello che gli elementi di lavoro sono costituiti da, e non gli stessi oggetti di lavoro . Penso che la programmazione che ho scritto stia cercando nel posto sbagliato.

dalla definizione di Microsoft di WorkItem, (http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.aspx) sembra che c'è dentro WorkItemTracking.Client, ma non all'interno della WorkItemStore, e non sono sicuro dove andare per accedervi.

VERSIONE FINALE:

Ecco la versione aggiornata della mia funzione, dopo riferimento alla risposta qui sotto. Questo restituisce solo una lunga stringa dei nomi degli oggetti di lavoro con nuove linee tra, per la stampa, che è tutto ciò che sto cercando di ottenere (per ora).

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

I su votare, sembra interessante. Aiuta qualcuno a lavorare su questo. – mybirthname

risposta

10

È necessario utilizzare query WIQL per ottenere gli articoli di lavoro reali a cui sei interessato, ad es. per ottenere tutti gli elementi di lavoro per un particolare progetto:

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

e tieni presente che esistono diversi metodi per le query Flat e Hierarchical –

+0

. Verificherò questo aspetto e vedrò se riesco a farlo funzionare. Grazie. –

+0

Hai usato "dal problema", ma non dovrebbe essere "da WorkItems"? Cosa fa riferimento al "problema"? –

Problemi correlati