在Visual Studio中,我通常通过源代码管理资源管理器打开变更集,通过转到变更集打开变更集,然后在显示变更集的团队资源管理器窗口中选择Actions->Request Review。
在C#中,我有让我查询所有变更集的代码:
VersionControlServer vcs = tpc.GetService<VersionControlServer>();
vcs.QueryHistory(...)
现在我有了一个Changeset实例列表。如何实现"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\1.5";
request.Save();
这将创建一个与Visual Studio中的代码审查请求非常相似的代码审查请求,但无法执行代码审查。我遗漏了什么?
发布于 2018-07-06 14:21:55
根据我所看到的,您正在使用Microsoft.TeamFoundationServer.ExtendedClient
包。您已经走上了正确的道路,但是您还需要一个名为Code Review Response
的工作项。有关这两个工作项的创建,请参阅博客文章Tfs Extensibility - Automatically Create Code Reviews on Checkin。关于工作项字段值,这篇文章对我帮助很大。以下是这篇文章中的基本代码部分:
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.TeamFoundation.Discussion.Client。在这个名称空间中,我们来看看类DiscussionThread
我希望这能帮到你。
https://stackoverflow.com/questions/48457678
复制相似问题