TFS API - Exemples en C#

 01/01/2019 |   Admin |  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;
}