Получить связанный с TFS рабочий элемент регистрации (не из набора изменений) - PullRequest
0 голосов
/ 27 декабря 2018

Я создаю политику проверки кода на стороне сервера для TFS, и в настоящее время она работает для любой регистрации, которая выполняется через 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);
                }
            }
        }

, однако это не работает с веб-интерфейсом пользователя.Основное различие, которое я замечаю при запуске кода для Visual Studio и веб-интерфейса пользователя, заключается в том, что контекст запроса относится к совершенно другому URL.

URL-адрес контекста запроса Visual Studio: http://localhost:8080/tfs/DefaultCollection/VersionControl/v5.0/repository.asmx

Веб-интерфейсконтекст запроса: http://localhost:8080/tfs/DefaultCollection/_apis/tfvc/changesets

Я считаю, что мне нужно использовать другое пространство имен и методы для доступа к информации внутри регистрации с помощью веб-интерфейса.

Я пытался использовать «Microsoft.VisualStudio.Services.WebApi "пространство имен для получения данных из веб-интерфейса, но я не могу найти в Интернете никакой информации о том, как получить информацию о регистрации, которая пытается обработать

1 Ответ

0 голосов
/ 27 декабря 2018

Опыт веб-редактирования использует другой набор API, как вы уже заметили.Серверные политики, по-видимому, не обрабатываются при использовании более новых API-интерфейсов, поскольку серверные плагины - это поддерживаемый, но не очень рекомендуемый тип функции "заголовок к устаревшему".

В общем, ваша политика не относится к веб-интерфейсу, и нет способа сделать это.Вы можете предложить Microsoft добавить поддержку, разместив что-то на UserVoice, но это все.

...