【问题标题】:TFS API: Request Review on Changeset in C#TFS API:请求审查 C# 中的变更集
【发布时间】:2018-07-05 13:49:26
【问题描述】:

在 Visual Studio 中,我通常通过 Source Control Explorer 打开 Changeset,通过 Go to Changeset 打开 Changeset,然后在显示 Changeset 的 Team Explorer 窗口中选择 Actions->Request Review。

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

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

现在我有一个变更集实例列表。 如何实现“请求审核”功能?

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

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 中的请求非常相似的代码审查请求,但无法执行代码审查。我错过了什么?

【问题讨论】:

    标签: c# tfs tfs-sdk


    【解决方案1】:

    据我所知,您正在使用包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();
    

    代码审查中的实际 cmets 使用讨论服务(请参阅Creating code review request through API)。有关讨论服务的 Microsoft 文档:Microsoft.TeamFoundation.Discussion.Client。 在这个命名空间中看一下DiscussionThread

    我希望这会有所帮助。

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然链接是分享知识的好方法,但如果它们在未来被破坏,它们将无法真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留对原始解决方案网站的链接引用。见:How do I write a good answer?
    • 感谢您的回答。我已经以非常相似的方式做到了这一点,但忘了回答我自己的问题。
    • 好的,没问题,成功了吗?讨论服务会生成一封包含更改的电子邮件发送给审阅者吗?
    • 是的,它有效。但我并没有弄乱讨论服务,因为我相信讨论线程已经为你创建了。您可以添加 cmets 和类似的东西,就像您直接从 Visual Studio 创建评论一样。
    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2012-12-04
    • 2017-12-06
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多