TFS API:请求审查 C# 中的变更集

TFS API: Request Review on Changeset in C#

在 Visual Studio 中,我通常通过源代码管理资源管理器打开变更集,通过转到变更集打开变更集,然后在团队资源管理器中 select Actions->Request Review window where显示变更集。

在 C# 中,我有可以查询所有变更集的代码:

VersionControlServer vcs = tpc.GetService<VersionControlServer>();
vcs.QueryHistory(...)

现在我有一个变更集实例列表。 如何实现 "Request Review" 功能?

我尝试像这样创建代码审查请求:

Project teamProject = _workItemStore.Projects["XYZ"];
WorkItemType workItemType = teamProject.WorkItemTypes["Code Review Request"];
var request = new WorkItem(workItemType) { Title = "Testreview" };
request.Fields["Associated Context Type"].Value = "Changeset";
request.Fields["Associated Context"].Value = "5169";
request.Fields["Assigned To"].Value = "Joe Doe";
request.AreaPath = @"XYZ\Test";
request.IterationPath = @"XYZ\Test.5";
request.Save();

这会创建一个与 Visual Studio 中的请求非常相似的代码审查请求,但无法执行代码审查。我错过了什么?

据我所知,您正在使用包 Microsoft.TeamFoundationServer.ExtendedClient。您的方向是正确的,但您还需要一项名为 Code Review Response 的工作项。这两个工作项的创建参考博客postTfs Extensibility - Automatically Create Code Reviews on Checkin。 post 在工作项字段值方面对我帮助很大。这是 post:

中的基本代码部分
var type = project.WorkItemTypes["Code Review Response"];
var workItem = new WorkItem(type) { Title = checkinNotification.Comment };
workItem.Fields["System.AssignedTo"].Value = "Betty"; //todo pick someone better
workItem.Fields["System.State"].Value = "Requested";
workItem.Fields["System.Reason"].Value = "New";

var result = workItem.Validate();
foreach (Field item in result)
{
    //insert some form of logging here
}
workItem.Save();

var responseId = workItem.Id;

type = project.WorkItemTypes["Code Review Request"];
workItem = new WorkItem(type) { Title = checkinNotification.Comment };
workItem.Fields["System.AssignedTo"].Value = checkinNotification.ChangesetOwner.DisplayName;
workItem.Fields["Microsoft.VSTS.CodeReview.ContextType"].Value = "Changeset";
workItem.Fields["Microsoft.VSTS.CodeReview.Context"].Value = checkinNotification.Changeset;
workItem.Fields["System.AreaPath"].Value = project.Name; //todo: may want a better location from source path
workItem.Fields["System.IterationPath"].Value = project.Name;
workItem.Fields["System.State"].Value = "Requested";
workItem.Fields["System.Reason"].Value = "New";
WorkItemLinkTypeEnd linkTypeEnd = workitemStore.WorkItemLinkTypes.LinkTypeEnds["Child"];
workItem.Links.Add(new RelatedLink(linkTypeEnd, responseId));
workItem.Save();

代码审查的实际评论使用讨论服务(参见Creating code review request through API). Microsoft documentation on the disscusion service: Microsoft.TeamFoundation.Discussion.Client。 在此命名空间中,查看 class DiscussionThread

希望对您有所帮助。