Domanda 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 oggetto 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<WorkItemStore>();

var versionStore = tfs.GetService<Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer>();

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<WorkItem>();

Questo mi dà una lista di WorkItem tipi. Quando loop sopra il result.FirstOrDefault().Fields proprietà, mi fornisce alcune informazioni utili sullo ShelveSet che è correlato alla Revisione del Codice, al "Contesto Associato". Usando queste informazioni, posso richiedere lo ShelveSet:

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

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

Ho esaminato il Microsoft.TeamFoundation.CodeReview spazio dei nomi fornito da entrambi Microsoft.TeamFoundation.CodeReview.Components e Microsoft.TeamFoundation.CodeReview.Controls librerie, ma anche questo 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?


18
2018-04-17 14:50


origine


risposte:


Non ho esempi di codice, ma secondo questa discussione, dovresti essere in grado di ottenere commenti sulla revisione del codice con funzionalità nel Microsoft.TeamFoundation.Discussion.Client namespace.

In particolare i commenti sono accessibili tramite il Thread di discussione classe. E dovresti essere in grado di interrogare le discussioni usando IDiscussionManager.


13
2018-05-08 07:32



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 possibile 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 è utile dopo aver scavato tramite MSDN.

 public List<CodeReviewComment> GetCodeReviewComments(int workItemId)
 {
        List<CodeReviewComment> comments = new List<CodeReviewComment>();

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

14
2017-10-29 19:19