TFS API - Exemples en C#

Tags : TFS, TFS API, TfsTeamProjectCollection

Categories: 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;
}

Aucun commentaire

Ajouter un commentaire