2013-04-17 29 views
17

TFS2012'deki bir Kod Gözden Geçirme İstek/Yanıt öğesiyle ilgili ayrıntıları bulmanın bir yolunu bulmaya çalışıyorum.TFS API'sini kullanarak, bir Kod Gözden Geçirmesinde yapılan yorumları nasıl bulabilirim?

aşağıdaki şekilde tüm Kod İnceleme İsteği/Yanıt öğeler için sorgulayabilir: Bu bana WorkItem türlerinin bir listesini verir

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

. result.FirstOrDefault().Fields özelliğinin üzerinden dönersek, Code Review, "Associated Context" ile ilgili olan ShelveSet hakkında bazı yararlı bilgiler verir.

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

bu bana ShelveSet öğeyi verir, ama ben hep bu noktada tıkanır var: Bu bilgileri kullanarak, shelveset için sorgulayabilir.

Hem Microsoft.TeamFoundation.CodeReview.Components hem de Microsoft.TeamFoundation.CodeReview.Controls kitaplıklarının sağladığı Microsoft.TeamFoundation.CodeReview ad alanını inceledim, ancak bu bana da yardımcı olmuyor.

Soruma Soru: TFS API'sı aracılığıyla bir Kod Gözden Geçirme (hem Genel Yorumlar hem de Dosya yorumları) sırasında bir ShelveSet üzerinde yapılan gerçek yorumları nasıl bulabilirim?

cevap

14

Kod inceleme yorumlarının TFS'den alınması için yeni bir gereksinimimiz var ve burada uygulamamızın kısa bir örneği var. WorkItemId başka bir yöntemle sorgulanmalıdır. Visual Studio'da veya UI'de bir TFS sorgusu aracılığıyla bile bakabilirsiniz. Bu, neyin mevcut ve neyi kullandığımızın küçük bir alt kümesidir. this link to be helpful after digging through MSDN'u buldum.

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