Пользовательские атрибуты

Если встроенного набора атрибутов для пожеланий, задач, требований и других артефактов, недостаточно для ведения проекта, то вы можете добавить необходимые вам атрибуты.


Полный перечень пользовательских атрибутов вы найдете в справочнике "Атрибуты" в настройках проекта. Там же можно создать атрибуты для произвольной сущности, либо конкретного подвида данной сущности, например, только требований заданного типа.


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


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

Чек-листы

Данный тип пользовательского атрибута предназначен для визуализации шагов (микро-задач), которые необходимо сделать в рамках выполнения базовой задачи.


Дополнительным применением этого типа поля является контроль выполнения важных действий, сопутствующих качественному решению задачи. Например, в Scrum это может быть Definition of Done по задачам: тесты написал, все проверил, локализацию обновил. В других методиках встречается термин Quality Gates - критерии качества, позволяющие уверенно сообщить о качественном решении задачи. Вы можете обозначить данное поле обязательным, тогда переход из одного состояния в другое станет возможен только после явной установки всех галочек в поле чек-листа.

Ссылки

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


В поле "Обратная ссылка" можно указать название ссылки у сущности, на которую создается ссылка. Это позволяет видеть связь с двух сторон - со стороны сущности, для которой добавляется ссылка, а также со стороны той сущности, на которую добавляется ссылка. Это способ реализовать двухстороннюю ассоциацию между двумя сущностями.


В поле "Ограничение" можно задать запрос поиска, который будет использоваться в качестве фильтра для обора значений доступных для выбора.

Вычисляемые атрибуты

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


Для этого необходимо создать пользовательский атрибут, где в качестве формулы для вычисления указать путь до требуемого значения:


Тогда в дереве функций вы сможете включить отображение этого поля и увидеть суммарную оценку по всем требованиям функции:


Описание синтаксиса

Для построения вычисляемых полей используется простой синтаксис: вы можете использовать любые символы, а также подстановки, окруженные фигурными скобками. В фигурных скобках задается путь к требуемому атрибуту. Если атрибут является ссылкой на сущность, то при помощи точки можно ссылаться на атрибуты этой сущности. Например, у Требования есть атрибут Тип, который по сути является ссылкой на сущность Тип требования. Если мы хотим вычислить краткое название типа требования, то достаточно записать {Тип требования.Краткое название}. Ссылаться на атрибуты сущности можно рекурсивно, например, у пожелания можно вычислить такой атрибут {Требования.Функции.Важность}. Чтобы узнать название атрибута или ссылки достаточно открыть карточку сущности, выбрать нужное поле и использовать его название в выражении.


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

{TestScenario?State = "submitted"}

В следующем примере можно посчитать плановые трудозатраты только по завершенным задачам:

{Tasks?State = "resolved"?.Planned}

Математические формулы

Для вычисления математических выражений в тексте формулы необходимо указать знак равно, после чего записать математическое выражение с использованием атрибутов сущности или связанных с ней сущностями, например,

={Оценка} * 1000 + 20

Сложные расчеты

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

Например, для вычисления значения атрибута (c1) на основе двух других (a1 и b1), на вкладке "Валидация" вы можете записать следующий скрипт:

$it->object->getRegistry()->Store( $it, 
    ['c1' => $it->get('a1') + $it->get('b1')]
);
return true;

В данном примере выполняется низкоуровневая операция изменения значения атрибута c1, при изменении любого атрибута на карточке сущности.

Если алгоритм расчета использует данные, хранящиеся в других объектах системы, то необходимо реализовать более сложный скрипт, выполняющийся по расписанию. Например,

// получим объект типа "Компонент"
$object = getFactory()->getObject('Component');

// пройдем по всем компонентам с типом "Сущность" и обновим атрибут c1
foreach( getFactory()->getByQuery($component, 'Type = "Сущность"') as $it )
{
    getFactory()->modifyEntity($it, 
        ['c1' => $it->get('a1') + $it->get('b1')]
    );
}

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