2013-04-17 4 views
17

TFS2012のコードレビューリクエスト/レスポンス項目の詳細を見つける方法を見つけようとしています。TFS APIを使用すると、コードレビューで作成されたコメントをどのように見つけることができますか?

私は次のようにすべてのコードレビューリクエスト/レスポンスの項目を照会することができます

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

これは私にWorkItemタイプのリストを提供します。 result.FirstOrDefault().Fieldsプロパティをループすると、コードレビュー、「関連するコンテキスト」に関連するShelveSetに関する有用な情報が得られます。

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

これは私にShelveSetアイテムを与えるが、私は動けなくなるところです。この情報を使用して、私はブセットを照会することができます。

Microsoft.TeamFoundation.CodeReview.ComponentsMicrosoft.TeamFoundation.CodeReview.Controlsライブラリの両方で提供されているMicrosoft.TeamFoundation.CodeReviewネームスペースを調べましたが、これは私にはさらに役立ちません。

私の質問は:コードレビュー(一般コメントとファイルコメントの両方)中に、TFS APIを通じてShelveSetで実際のコメントを見つけるにはどうすればよいですか?

答えて

12

私はコード例を持っていませんが、this discussionによれば、Microsoft.TeamFoundation.Discussion.Client名前空間の機能を使ってコードレビューコメントにアクセスできるはずです。

具体的には、コメントはDiscussionThreadクラスからアクセスできます。そして、あなたはIDiscussionManagerを使ってディスカッションに問い合わせることができます。

+0

これは私が探していたものです。どうもありがとう! – RoelF

14

私たちは、TFSからのコードレビューコメントを引き出す新しい要件を持っています。ここでは、実装したものの簡単な例を示します。 workItemIdは、別の方法で照会する必要があります。あなたはVisual StudioやUIのTFSクエリでそれを見ることさえできます。これは利用可能なものと私たちが使用しているものの小さなサブセットです。私はthis link to be helpful after digging through 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; } 
    } 
関連する問題