Как я могу контролировать оценку моей пользовательской политики регистрации? - PullRequest
0 голосов
/ 05 января 2012

Я создал пользовательскую политику регистрации для TFS, написав класс, который расширяет PolicyBase (согласно MSDN Практическое руководство. Создание пользовательских политик регистрации в Visual Studio Team Foundation ). Переопределенный метод Evaluate() - вот где у меня есть логика.

Evaluate() вызывается, когда пользователь нажимает кнопку регистрации в TFS, и это здорово, потому что это то, что я хочу.

Однако, также кажется, что Evaluate() вызывается, когда:

  1. Visual Studio запущена И
  2. Пользователь переходит на вкладку Pending Changes в первый раз (или, если это уже активная вкладка при запуске VS) И
  3. У пользователя есть элементы на вкладке ожидающих изменений.

Как я могу проверить, по какому сценарию называется Evaluate? Мне бы хотелось, чтобы Evaluate вызывался только тогда, когда пользователь явно нажимает кнопку «Регистрация» в TFS.

Реальный метод Evaluate, который я использую, довольно сложен, но я упростил его до того, что все еще вызывает ту же проблему:

public override PolicyFailure[] Evaluate()
{
    List<PolicyFailure> policyFailures = new List<PolicyFailure>();

    if (_isPolicyEnabled)
    {
        if (PendingCheckin.PendingChanges.Comment.Contains("*"))
        {
            string msg = "Star in comment";
            MessageBox.Show(msg);
            policyFailures.Add(new PolicyFailure(msg, this));
        }
    }
    return policyFailures.ToArray();
}

С помощью приведенного выше кода, если в комментарии о возврате есть звездочка и имеются ожидающие изменения, закройте Visual Studio, при повторном открытии он вызовет MessageBox, как только вы перейдете на вкладку Ожидающие изменения .

В моей ситуации используется политика регистрации, когда я проверяю комментарий пользователя на предмет ссылок на элементы в другой системе. Если их нет, я выкидываю интерактивный диалог, который показывает пользователю список элементов, которые можно отфильтровать и выбрать. Затем они вставляются в комментарий к регистрации. Есть ли в Evaluate() способ узнать, по какому сценарию это называется? Я мог бы не вызывать диалоговое окно при всех вызовах, кроме тех, которые запускаются при регистрации.

1 Ответ

1 голос
/ 05 января 2012
  • Evaluate() не должен отображать пользовательский интерфейс (как Эдвард Томсон уже упоминается).
  • Evaluate() должен просто создавать сбои, если они есть вопросы.

Это создаст список сбоев, которые пользователь может затем дважды щелкнуть. Двойной щелчок по ошибке может затем использоваться (обрабатывается Activate()) для запуска отображения компонентов пользовательского интерфейса. Я еще не пробовал, но похоже, что это сработает.

Подробности в этом сообщении на форуме MSDN: Запрос пользователя от политики регистрации происходит несколько раз .

...