Тонкая настройка правил рабочих элементов в TFS
Очень часто в организациях и командах использующих Team Foundation Server требуется специфичная функциональность. Действительно, шаблоны процессов входящие в комплект поставки TFS достаточно универсальны и обеспечивают базовый уровень автоматизации, который может не учитывать уникальной специфики свойственной подходу который принят в какой-то конкретной организации или группе разработчиков.
К счастью, шаблоны процессов и функциональность TFS обеспечивает очень тонкую настройку процесса , состояний, наборов полей и их поведения. Эти возможности могут решить очень большой спектр задач, требуемый в таких случаях.
Модификации процесса и состояний рабочих элементов могут быть осуществлены как на уровне конкретного процесса, так и на уровне глобального шаблона. Основным инструментарием, который помогает это делать, являются утилиты командной строки WitImport и Witexport. Дополнительно, существуют возможности модификации процессов с помощью расширения Visual Studio Power Tools. Это расширение можно скачать с сайта https://Codeplex.com .
Ниже приведены некоторые типовые примеры, которые помогут решить очень большой спектр задач тонкой настройки состояний рабочих элементов, их поведения и зависимостей.
Требование по установке поля «Оставшаяся работа» в 0 при переводе задачи в статус «Закрыто».
В некоторых случаях требуется, чтобы полю «Оставшаяся работа» было присвоено значение 0 при переводе задачи в статус «Закрыто». Организуется это следующим образом:
1) В определении задачи следует создать новое поле «Проверка поля Оставшаяся работа»
<FIELD type="String" name="Проверка поля Оставшаяся работа"
refname="Demo.RemainingWorkValidation">
<ALLOWEDVALUES>
<LISTITEM value="Ошибок Нет" />
</ALLOWEDVALUES>
<WHEN field="Microsoft.VSTS.Scheduling.RemainingWork"
value="0">
<COPY from="value" value="Ошибок нет" />
</WHEN>
</FIELD>
2) Добавить новую вкладку, и вывести это поле на эту вкладку:
<Tab Label="Валидация">
<Group>
<Column PercentWidth="100">
<Control Type="FieldControl"
FieldName="Demo.RemainingWorkValidation"
Label="Проверка обуления поля Оставшаяся работа"
LabelPosition="Left"/>
</Column>
</Group>
</Tab>
3) Добавить в определение перехода между статусами из «Активно» в «Закрыто» следующий код:
<TRANSITION from="Активные" to="Закрыто">
<REASONS>
<DEFAULTREASON
value="Завершено и не требует просмотра или тестирования"/>
<REASON value="Отложено"/>
<REASON value="Вырезать"/>
<REASON value="Обгоняется событиями"/>
<REASON value="Отменено"/>
</REASONS>
<FIELDS>
<FIELD refname="Demo.RemainingWorkValidation">
<WHENNOT field="Microsoft.VSTS.Scheduling.RemainingWork"
value="0">
<COPY from="value"
value="Оставшаяся работа должна быть в значении 0"
ReadOnly="True"
/>
</WHENNOT>
</FIELD>
4) Добавить в состояние «Активные» следующий код:
<STATE value="Активные">
<FIELDS>
<FIELD refname="Demo.RemainingWorkValidation">
<COPY from="value" value="Ошибок нет" />
</FIELD>
5) Добавить в состояние «Закрыто» следующий код:
<STATE value="Закрыто">
<FIELDS>
<FIELD refname="Demo.RemainingWorkValidation">
<WHENNOT field="Microsoft.VSTS.Scheduling.RemainingWork"
value="0">
<COPY from="value"
value=" Оставшаяся работа должна быть в значении 0" />
</WHENNOT>
</FIELD>
В результате получим следующее сообщение, если поле «Оставшаяся работа не будет содержать 0 при переводе статуса:
Требование, обеспечивающее возможность перевода рабочего элемента «Ошибка» в статус «Закрыто» только тем пользователем, который его создал.
Иногда требуется ввести ограничение обеспечивающее возможность перевода рабочего элемента «Ошибка» в статус «Закрыто» только тем пользователем, который его создал или администраторами проекта. Для этого следует ввести следующие модификации в определение стандартного элемента «Ошибка»:
1) Создать поле «ClosedByValidation»
<FIELD name="Closed By Validation"
refname="Demo.ClosedByValidation"
type="String">
<COPY from="currentuser" />
<FROZEN not="[project]\Администраторы проекта"/>
</FIELD>
2) Добавить следующее правило в состояние «Закрыто»
<STATE value="Закрыто">
<FIELDS>
<FIELD refname="Demo.ClosedByValidation">
<COPY from="currentuser" />
</FIELD>
3) Добавить новую вкладку «Валидация» и вывести на нее следующие поля:
<Tab Label="Валидация">
<Group>
<Column PercentWidth="100">
<Control Type="FieldControl"
FieldName="System.CreatedBy"
Label="Кем создано"
LabelPosition="Left"
ReadOnly="True" />
<Control Type="FieldControl"
FieldName="Demo.ClosedByValidation"
Label="Кем закрыто (должно соответствовать кем создано)"
LabelPosition="Left"
ReadOnly="True" />
</Column>
</Group>
</Tab>
В поле Demo.ClosedByValidation будет записан пользователь – создатель рабочего элемента. И в случае если это значение будет отличаться от текущего пользователя при переводе рабочего элемента «Ошибки» в статус «Закрыто» будет выведено сообщение об ошибке:
Требование, обеспечивающее возможность создания рабочих элементов только теми пользователями, которые входят в некоторую группу.
Иногда требуется чтобы рабочие элементы типа «Ошибка» могли создаваться только пользователями тестерами входящими в группу [project]\Тестировщики. Для этого следует ввести в стандартное определение рабочего элемента «Ошибка» следующие модификации:
1) В переход между состояниям по умолчанию добавить следующий код:
<TRANSITION from="" to="Предложено">
<REASONS>
<DEFAULTREASON value="Создать"/>
<REASON value="Не удалось выполнить построение"/>
</REASONS>
<FIELDS>
<FIELD refname="System.AssignedTo">
<DEFAULT from="currentuser"/>
</FIELD>
< FIELDrefname = "System.State">
< READONLYnot = "[project]\ Тестировщики " />
</ FIELD >
</FIELDS>
</TRANSITION>
Теперь при попытке сохранить такой рабочий элемент пользователем который не входит в рабочую группу «Тестировщики» будет выведено сообщение об ошибке:
Эту же задачу можно решить иным способом, используя механизмы обеспечения безопасности между переходами, добавив следующий модификатор:
<TRANSITION from=""
to="Предложено"
for="[project]\Тестеры"
not="[project]\Аналитики">
Но сообщение об ошибке которое будет выводиться системой будет несколько неочевидрным, и предложенный выше способ выглядит более удачным.
Обеспечение некоторого поля значениями по умолчанию.
Для того что бы в некотором поле была возможность выбора из выпадающего списка некоторых заранее заданных значений, и задания значения по умолчанию, достаточно внести в определение рабочего элемента следующих модификаций:
<FIELD name="Категория"
refname="MyCompany.MyProcess.Category"
type="String"
reportable="dimension">
<ALLOWEDVALUES>
<LISTITEM value="Управление процессом" />
<LISTITEM value="Планирование" />
<LISTITEM value="Исполнение" />
<LISTITEM value="Ревью" />
</ALLOWEDVALUES>
<DEFAULT from="value" value="Исполнение" />
</FIELD>
Следует учитывать, что значения по умолчанию срабатывают только в том случае если поле было пустым.
Обеспечение зависимости поля списка от значений другого поля
Иногда требуется, чтобы поле-список предлагало некоторые значения, зависящие от значения другого поля. Для того чтобы обеспечить такую возможность достаточно внести следующие модификации в определение рабочего элемента:
<FIELD name="Категория"
refname="MyCompany.MyProcess.Category"
type="String"
reportable="dimension">
<WHEN field="Microsoft.VSTS.Common.Discipline"
value="Требования">
<ALLOWEDVALUES>
<LISTITEM value="Планирование" />
<LISTITEM value="Ревью" />
</ALLOWEDVALUES>
</WHEN>
<WHENNOT field="Microsoft.VSTS.Common.Discipline"
value="Требования">
<ALLOWEDVALUES>
<LISTITEM value="Управление процессом" />
<LISTITEM value="Планирование" />
<LISTITEM value="Исполнение" />
<LISTITEM value="Ревью" />
</ALLOWEDVALUES>
</WHENNOT>
<DEFAULT from="value" value="Исполнение" />
</FIELD>
Как уже стало понятно из примера, требуемая возможность обеспечивается модификаторами WHEN и WHENNOT.
Обеспечение значения поля шаблону.
Иногда необходимо чтобы значение поля соответствовало некоторому шаблону, примерно так же как это может обеспечивать механизм RegExp. Для обеспечения такой возможности достаточно внести в определение рабочего элемента следующие изменения:
<FIELD name="Версия"
refname="MyCompany.MyProcess.Version"
type="String">
<MATCH pattern="vNN.NN.AX"/>
</FIELD>
После внесения такой модификации, значение поля будет требовать соответствия шаблону vNN.NN.AX. Более подробно о формате шаблонов можно узнать в документации к Team Foundation Server.
Обеспечение значения поля «Назначено» некоторому набору пользователей входящих в группу.
Иногда требуется, чтобы поле рабочего элемента «Назначено» соответствовало только заранее заданному перечню пользователей входящих в группу. Для обеспечения такой возможности достаточно внести следующие изменения в рабочий элемент:
<FIELD name="Назначено"
refname="System.AssignedTo"
type="String"
reportable="dimension">
<ALLOWEDVALUES expanditems="true">
<LISTITEM value="[Project]\Участники" />
</ALLOWEDVALUES>
</FIELD>
Обеспечение значения поля некоторому заданному перечню, хранящемуся в глобальном файле.
Иногда множество значений, которое может быть присвоено полю удобно хранить на уровне всех проектов зарегистрированных в системе. Для обеспечения такой возможности достаточно создать XML файл с следующим содержанием:
<?xml version="1.0" encoding="utf-8"?>
<gl:GLOBALLISTS xmlns:gl="https://schemas.microsoft.com/VisualStudio/2008/workitemtracking/globallists">
<GLOBALLIST name="Дисциплина">
<LISTITEM value="Архитектура" />
<LISTITEM value="Требования" />
<LISTITEM value="Разработка" />
<LISTITEM value="Управление релизами" />
<LISTITEM value="Управление проектом" />
<LISTITEM value="Тестирование" />
</GLOBALLIST>
</gl:GLOBALLISTS>
После чего необходимо проделать операцию импорта этого файла следующей командой:
glimport / f «Путь к файлу»\<имя файла. xml >" / t " имя сервера "
Comments
Anonymous
May 21, 2009
PingBack from http://microsoft-sharepoint.simplynetdev.com/%d1%82%d0%be%d0%bd%d0%ba%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb-%d1%80%d0%b0%d0%b1%d0%be%d1%87%d0%b8%d1%85-%d1%8d%d0%bb%d0%b5%d0%bc/Anonymous
June 30, 2009
Черех xml конечно хорошо, но с Power Tools мне кажется проще будет :) Свои мысли по этому поводу тоже изложил: http://ashamray.wordpress.com/stati_avt/tfs_process_custom