我正在为TFS创建服务器端代码审查策略,目前我可以将其用于通过Visual Studio运行的任何签入,但是当有人尝试通过Web UI签入时,则无效。
策略正在签入中查找相关的工作项,然后浏览该工作项以确认其满足特定要求。我可以通过Visual Studio签入的通道获取关联的工作项
public EventNotificationStatus ProcessEvent(IVssRequestContext requestContext, NotificationType notificationType, object notificationEventArgs, out int statusCode, out string statusMessage, out ExceptionPropertyCollection properties)
{
statusCode = 0;
statusMessage = string.Empty;
properties = new ExceptionPropertyCollection();
var checkinNotification = notificationEventArgs as CheckinNotification;
if (notificationType == NotificationType.DecisionPoint && notificationEventArgs is CheckinNotification)
{
bool isNullComment = false;
bool isCheckinContains = false;
var service = requestContext.GetService<ILocationService>();
TfsTeamProjectCollection tfsTeamProjectCollection = new TfsTeamProjectCollection(GetTfsUri(requestContext));
WorkItemStore workitemStore = tfsTeamProjectCollection.GetService<WorkItemStore>();
var changes = checkinNotification.GetSubmittedItems(requestContext);
isCheckinContains = changes.Any(change => change.ToUpper().Contains("$/"));
if (isCheckinContains)
{
isNullComment = string.IsNullOrEmpty(checkinNotification.Comment.ToString());
//Read all associated workitem id's
var assoWorkItems = checkinNotification.NotificationInfo.WorkItemInfo.Select(x => x.Id);
}
}
}
但是,这不适用于Web UI。在Visual Studio和Web UI上运行代码时,我注意到的主要区别是请求上下文指向一个非常不同的URL。
Visual Studio请求上下文URL:http://localhost:8080/tfs/DefaultCollection/VersionControl/v5.0/repository.asmx
Web Ui请求上下文:http://localhost:8080/tfs/DefaultCollection/_apis/tfvc/changesets
我认为我需要使用其他名称空间和方法来通过Web UI访问签入中的信息。
我一直在尝试使用“ Microsoft.VisualStudio.Services.WebApi”命名空间从Web UI获取数据,但是我无法在线找到有关如何获取试图处理的签入信息的任何信息>
答案 0 :(得分:0)
如您所见,Web编辑体验使用一组不同的API。使用更新的API时,服务器端策略显然不会得到处理,因为服务器端插件是受支持但并非真正推荐的标题朝着弃用的功能。
因此,基本上,您的政策不适用于Web UI,也没有办法实现。您可以建议Microsoft通过在UserVoice上发布一些内容来增加支持,仅此而已。