Вот это класс, который захватывает элемента работы событие изменения и проверяет, чтобы увидеть, если это вновь созданный рабочий элемент.
Внутри события, если это вновь созданный рабочий элемент, вы можете сделать то, что вам нужно, с именем проекта, связанным с этим рабочим элементом.
using Microsoft.TeamFoundation.Framework.Server;
using System;
using Microsoft.TeamFoundation.Common;
using Microsoft.TeamFoundation.WorkItemTracking.Server;
namespace TfsProcess.CaptureProjectNameOnNewWorkItem
{
public class CaptureProjectNameOnNewWorkItem : ISubscriber
{
public string Name
{
get
{
return "CaptureProjectNameOnNewWorkItem";
}
}
public SubscriberPriority Priority
{
get
{
return SubscriberPriority.Normal;
}
}
public EventNotificationStatus ProcessEvent(
TeamFoundationRequestContext requestContext,
NotificationType notificationType,
object notificationEventArgs,
out int statusCode,
out string statusMessage,
out ExceptionPropertyCollection properties)
{
statusCode = 0;
properties = null;
statusMessage = String.Empty;
try
{
ProcessNotification(notificationType, notificationEventArgs, requestContext);
}
catch (Exception exception)
{
TeamFoundationApplicationCore.LogException("Error processing event", exception);
}
return EventNotificationStatus.ActionPermitted;
}
private static void ProcessNotification(NotificationType notificationType, object notificationEventArgs, TeamFoundationRequestContext requestContext)
{
if (notificationType == NotificationType.Notification && notificationEventArgs is Microsoft.TeamFoundation.WorkItemTracking.Server.WorkItemChangedEvent)
{
var ev = notificationEventArgs as WorkItemChangedEvent;
if (ev.ChangeType == ChangeTypes.New)
{
//Do somethin with the project name of the newly created work item
// projectName = ev.PortfolioProject;
}
}
}
public Type[] SubscribedTypes()
{
return new Type[1] { typeof(WorkItemChangedEvent) };
}
}
}
Update:
Вы можете создать плагин, реализующий интерфейс ITeamFoundationRequestFilter, который запускается на выполнение ПЕРЕД или ПОСЛЕ Team Foundation Server принимает и обрабатывает запросы. Это позволяет проверять рабочие элементы и отменять создание рабочего элемента, если оно недействительно, например, на основе некоторой логики.
Вот ссылка на блог с реализацией этого, которая отменит создание рабочего элемента, если он создается определенным пользователем.
Getting information from a TFS Request
How to implement ITeamFoundationRequestFilter
Для того, чтобы получить работу Item ID вы перехватывать XML-ответ мыло и разобрать его на значение рабочего элемента.
Используя плагин фильтра, вы можете фильтровать любой из методов, ответственных за обновление, создание и запрос рабочих элементов.
В блоге содержится более подробное объяснение и реализация.
Фактически, метод ISubscriber запускается, когда iten уже сохранен. Но мне нужно проверить некоторые поля раньше. Итак, нужно работать с RequestContext. –
«WorkItemChangedEvent» срабатывает только после сохранения рабочего элемента, который включает проверку. Это не так. –