TFS API - Exemples en C#
Se connecter au team project :
Pour la démo je mets les settings directement dans les classes/méthodes. Dans la vrai vie, on utilisera un fichier de conf ou autre ;)
public static Uri CollectionUri = new Uri("https://adresse-serveur-tfs/tfs/DefaultCollection"); public static NetworkCredential NetworkCredential = new NetworkCredential(@"login", "pwd"); TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(CollectionUri , NetworkCredential ); workItemStore = teamProjectCollection.GetService(); if (!teamProjectCollection.HasAuthenticated) { throw new Exception("Not Authenticated"); } // Ici seront faites, toutes les opérations (read + write) teamProjectCollection.Dispose();
Lire un WorkItem
// Ici on souhaite obtenir un WI en fonction de son titre. string query = "SELECT * FROM Issue WHERE Title = '" + title + "'"; WorkItemCollection workItemCol = workItemStore.Query(query); // Exécution de la requête WorkItem workItem = workItemStore.Query(query)[0]; // récupération du WI #if DEBUG // Liste tous les champs du WI, très utile en debug pour connaître le nom des champs var filedsStr = string.Join(" - ", workItem.Fields.Cast().Select(f => f.ReferenceName).ToList()); #endif // get title var titleField = workItem.Fields["Title"].Value; // On ouvre le WI pour pouvoir le modifier workItem.PartialOpen(); // Mise à jour du titre avec la méthode updateField (voir plus bas) updateField(workItem, "Title", "Title Updated"); // Vérif si tout est OK ArrayList result = workItem.Validate(); if (result.Count == 0) { // Sauvegarde si validation OK workItem.Save(); } else { Logger.Warning("Can't save TFS workitem " + title); } // fermeture du WI, opération terminée workItem.Close();
Mise à jour d'un champs avec vérifications
private void updateField(WorkItem workItem, string fieldName, object value) { if (workItem.Fields.Cast().FirstOrDefault(f => f.Name == fieldName || f.ReferenceName == fieldName) == null) { Logger.Error("WorkItem Field " + fieldName + " does not exist"); return; } workItem.Fields[fieldName].Value = value; }
Lier 2 WorkItems
Ou lier un nouveau WI, dans ce cas, utiliser new WorkItem pour wi2
private void linkWorkItems(WorkItem wi1, WorkItem wi2) { wi1.Links.Add(new RelatedLink(wi2.Id)); wi1.Save(); }
Obtenir les WorkItems liés à un WorkItem
private List getRelatedWorkItem(WorkItem workItem) { List results = new List(); var links = workItem.WorkItemLinks; foreach (var link in links) { if (link.GetType() == typeof(WorkItemLink)) { var wil = link as WorkItemLink; results.Add(workItemStore.GetWorkItem(wil.TargetId)); } } return results; }