使用TFS API,我怎么能找到它是在代码审查提出的意见?(Using TFS API, how c

2019-08-31 09:16发布

我试图想出一个办法来找到有关TFS2012代码审查请求/响应项目的详细信息。

我可以查询下面的方式,所有代码审查请求/响应项目:

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属性,它确实给我,这是关系到代码评审,在“关联语境”搁置一些有用的信息。 利用这些信息,我可以查询搁置:

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

这给了我一个ShelveSet的项目,但是这就是我卡住。

我看着到Microsoft.TeamFoundation.CodeReview双方提供的命名空间Microsoft.TeamFoundation.CodeReview.ComponentsMicrosoft.TeamFoundation.CodeReview.Controls库,但是这并不能帮助我进一步两种。

我的问题是:我如何才能找到一个代码审查期间搁置提出的实际意见(包括一般性意见和文件的注释)通过TFS API?

Answer 1:

我没有代码示例,但根据这次讨论 ,你应该能够获得代码审查意见与功能Microsoft.TeamFoundation.Discussion.Client命名空间。

具体的意见都可以通过访问DiscussionThread类。 你应该能够查询使用讨论IDiscussionManager 。



Answer 2:

我们有一个新的需求拉动从TFS代码审查意见,这里是什么,我们实现了一个简单的例子。 所述workItemId必须通过另一种方法进行查询。 你甚至可以看看它在Visual Studio中或通过UI一个TFS查询。 这是可用的和我们所使用的一小部分。 我发现这个链接是通过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; }
    }


文章来源: Using TFS API, how can I find the comments which were made on a Code Review?