commits c# api tfs2012 object-model tfs-code-review

c# - commits - Utilizando la API de TFS, ¿cómo puedo encontrar los comentarios que se hicieron en una Revisión de Código?



vsts api (2)

No tengo ejemplos de código, pero de acuerdo con esta discusión , debería poder obtener comentarios de revisión de código con funcionalidad en el espacio de nombres Microsoft.TeamFoundation.Discussion.Client .

Específicamente, los comentarios son accesibles a través de la clase DiscussionThread . Y deberías poder consultar discusiones usando IDiscussionManager .

Estoy tratando de encontrar una manera de encontrar detalles sobre un elemento de Solicitud / Respuesta de Revisión de Código en TFS2012.

Puedo consultar todos los elementos de Solicitud / Respuesta de Revisión de Código de la siguiente manera:

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

Esto me da una lista de tipos de WorkItem . Cuando hago un bucle sobre el result.FirstOrDefault().Fields propiedad, me da alguna información útil sobre el ShelveSet que está relacionado con la Revisión de Código, el "Contexto Asociado". Usando esta información, puedo consultar el ShelveSet:

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

esto me da un objeto de ShelveSet , pero ahí es donde me quedo atascado.

He investigado el espacio de nombres Microsoft.TeamFoundation.CodeReview proporcionado por las bibliotecas Microsoft.TeamFoundation.CodeReview.Components y Microsoft.TeamFoundation.CodeReview.Controls , pero esto tampoco me ayuda.

Mi pregunta es: ¿Cómo puedo encontrar los comentarios reales realizados en un ShelveSet durante una Revisión del Código (tanto los comentarios Generales como los comentarios del Archivo) a través de la API de TFS?


Tenemos un nuevo requisito para extraer comentarios de revisión de código de TFS y aquí hay un breve ejemplo de lo que implementamos. El workItemId tiene que ser consultado a través de otro método. Incluso puede buscarlo en Visual Studio o mediante una consulta TFS en la interfaz de usuario. Este es un pequeño subconjunto de lo que está disponible y lo que estamos usando. Encontré que este enlace es útil después de excavar a través de 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; } }