Utilizzando l’API TFS, come posso trovare i commenti che sono stati fatti su una revisione del codice?

Sto cercando di trovare un modo per trovare dettagli su un object di richiesta / risposta di revisione del codice in TFS2012.

Posso interrogare tutti gli articoli di richiesta / risposta di revisione del codice nel seguente modo:

const string TfsUri = "http://mytfsserver:8080/tfs/Default ProjectCollection"; var tfs = new TfsTeamProjectCollection(new Uri(TfsUri)); var store = tfs.GetService(); var versionStore = tfs.GetService(); var queryText = "SELECT [System.Id], FROM WorkItems WHERE [System.WorkItemType] = 'Code Review Request' or [System.WorkItemType] = 'Code Review Response'"; var query = new Query(store, queryText); var result = query.RunQuery().OfType(); 

Questo mi dà una lista di tipi di WorkItem . Quando result.FirstOrDefault().Fields il loop sulla proprietà result.FirstOrDefault().Fields , mi fornisce alcune informazioni utili sullo ShelveSet che è correlato al Code Review, al “Contesto Associato”. Usando queste informazioni, posso richiedere lo ShelveSet:

 var versionStore = tfs.GetService(); var shelveset = versionStore.QueryShelvesets("someCodeReviewId_xxxx","someUserName"); 

questo mi dà un object ShelveSet , ma è lì che mi ShelveSet .

Ho esaminato lo spazio dei nomi Microsoft.TeamFoundation.CodeReview fornito da entrambe le librerie Microsoft.TeamFoundation.CodeReview.Components e Microsoft.TeamFoundation.CodeReview.Controls , ma ciò non mi aiuta ulteriormente.

    La mia domanda è: come posso trovare i commenti effettivi fatti su uno ShelveSet durante una revisione del codice (sia commenti generali che commenti sui file) attraverso l’API TFS?

    Non ho esempi di codice, ma secondo questa discussione , dovresti essere in grado di ottenere commenti di revisione del codice con funzionalità nello spazio dei nomi Microsoft.TeamFoundation.Discussion.Client .

    In particolare i commenti sono accessibili tramite la class DiscussionThread . E dovresti essere in grado di interrogare le discussioni usando IDiscussionManager .

    Abbiamo un nuovo requisito per inserire commenti di revisione del codice da TFS e qui c’è un breve esempio di ciò che abbiamo implementato. WorkItemId deve essere interrogato tramite un altro metodo. È anche ansible cercarlo in Visual Studio o tramite una query TFS nell’interfaccia utente. Questo è un piccolo sottoinsieme di ciò che è disponibile e ciò che stiamo usando. Ho trovato questo collegamento per essere utile dopo scavare attraverso MSDN .

      public List GetCodeReviewComments(int workItemId) { List comments = new List(); Uri uri = new Uri(URL_TO_TFS_COLLECTION); TeamFoundationDiscussionService service = new TeamFoundationDiscussionService(); service.Initialize(new Microsoft.TeamFoundation.Client.TfsTeamProjectCollection(uri)); IDiscussionManager discussionManager = service.CreateDiscussionManager(); IAsyncResult result = discussionManager.BeginQueryByCodeReviewRequest(workItemId, QueryStoreOptions.ServerAndLocal, new AsyncCallback(CallCompletedCallback), null); var output = discussionManager.EndQueryByCodeReviewRequest(result); foreach (DiscussionThread thread in output) { if (thread.RootComment != null) { CodeReviewComment comment = new CodeReviewComment(); comment.Author = thread.RootComment.Author.DisplayName; comment.Comment = thread.RootComment.Content; comment.PublishDate = thread.RootComment.PublishedDate.ToShortDateString(); comment.ItemName = thread.ItemPath; comments.Add(comment); } } return comments; } static void CallCompletedCallback(IAsyncResult result) { // Handle error conditions here } public class CodeReviewComment { public string Author { get; set; } public string Comment { get; set; } public string PublishDate { get; set; } public string ItemName { get; set; } }