Настройка статусной модели
Вы можете изменить статусную модель задач SDLC и подзадач в соответствии с потребностями вашего процесса разработки.
Принимая решение о настройке статусной модели, обратите внимание на следующее:
- Изменение статусной модели нарушит работу некоторых возможностей SDLC, таких как пополнение бэклога и планирование спринтов. Подробнее см. ниже.
- Внесенные изменения могут быть перезаписаны при последующих обновлениях приложения.
Никогда не изменяйте системные значения коробочных статусов.
Настройка статусной модели задач включает в себя следующие этапы:
- Создание необходимых опций выбора для поля Статус
- Настройка переходов для созданных статусов
- Вынесение новых статусов на доску
Создание опций выбора
Перед созданием опций выбора убедитесь, что в Настройках администратора боковой панели выбрано приложение SDLC.
Чтобы создать опции выбора для нового статуса, выполните следующие действия:
-
В навигаторе перейдите в Настройка системы → Все таблицы.
-
Найдите в списке таблицу Задачи (task) и перейдите на ее форму.
-
Перейдите в область Связанные списки и откройте вкладку Колонки.
-
Найдите колонку Статус (state) и перейдите на ее форму.
-
Перейдите в область Связанные списки и откройте вкладку Выбор.
-
Нажмите Создать и заполните поля:
Поле Описание Таблица Выберите таблицу Задачи SDLC (pda_backlog_item) или Подзадачи (pda_subtask) в зависимости от того, какую модель вам нужно настроить. Заголовок Укажите заголовок статуса. Рекомендуется задать заголовок, уникальный в рамках выбранной Таблицы. Язык Укажите язык, для которого создается статус:
ru
– для русского языкаen
– для английского
Значение Введите значение, которое будет использоваться в системной логике. Используйте латинские буквы и цифры. Значение не должно совпадать со значениями коробочных статусов. Рекомендуется задать значение, уникальное в рамках выбранной Таблицы. Порядок Укажите число, чтобы определить положение нового статуса в выпадающем списке по отношению к уже существующим. Статусы располагаются в списке по возрастанию. Рекомендуется присваивать значения с шагом 10, если статус находится между двумя другими, и 100, если он располагается в конце списка. -
Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.
-
При необходимости, повторите шаги 6–7 для всех языков, используемых в системе. В результате для каждого статуса должны быть созданы опции выбора для каждого языка, отличающиеся только значениями полей Заголовок и Язык.
-
(опционально) Для того, чтобы задачи в новом статусе выделялись цветом в списках задач, создайте соответствующее правило оформления.
Подробнее о создании опций выбора читайте в статье Поля выбора.
Настройка статусных переходов
Добавление статусов нарушит работу некоторых возможностей системы в указанных ниже условиях.
При добавлении нового статуса перед коробочными статусами Новый или Бэклог:
- В быстрых фильтрах в интерфейсе пополнения бэклога / планирования спринтов не будут отображаться задачи в новых статусах.
- Количество незавершенных задач при выпуске релиза будет подсчитываться неправильно.
- Может нарушиться поведение, при котором статус задачи меняется с Новый на Бэклог при запуске спринта.
- Может быть нарушена работа некоторых полей на формах задач.
При добавлении нового статуса между коробочными статусами Бэклог и Готово:
- В быстрых фильтрах Все доступные задачи и Текущие задачи проекта в интерфейсе пополнения бэклога / планирования спринтов не будут отображаться задачи в новых статусах.
- Количество незавершенных задач при выпуске релиза будет подсчитываться неправильно.
- Может быть нарушена работа некоторых полей на формах задач.
При изменении статусной модели подзадач могут некорректно отображаться списки подзадач на карточках досок проектов.
Для того, чтобы настроить переходы между созданными статусами, выполните следующие действия:
-
В навигаторе перейдите в Настройки переходов → Статусные модели.
-
Найдите в списке запись Backlog item (для задач SDLC) или Subtask (для подзадач) и перейдите на ее форму.
-
Перейдите в область Связанные списки и откройте вкладку Статусные переходы.
-
Создайте входящие переходы:
- Откройте форму статуса, из которого вам нужно создать переход в новый статус.
- Добавьте новый статус в поле Доступные переходы и нажмите Сохранить.
-
Вернитесь на форму статусной модели и при необходимости повторите шаг 4 для всех входящих переходов.
-
Создайте исходящие переходы:
- Нажмите создать в связанном списке Статусные переходы.
- В поле Статус укажите новый статус.
- В поле Доступные переходы добавьте все статусы, в которые вам нужно сделать доступным переход из нового статуса.
- Нажмите Сохранить.
Подробнее о настройке статусных моделей читайте в статье Настройки переходов
Вынесение новых статусов на доску
При создании новых проектов после расширения статусной модели новые статусы будут добавлены на доску проекта. Для того, чтобы добавить столбцы с новыми статусами на существующие доски проектов, выполните следующие действия:
-
Перейдите в Настройка системы → Серверные скрипты.
-
Нажмите Создать.
-
Замените текст в поле Скрипт на следующий:
Скрипт для добавления статусов на существующую доску
const BOARD_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
const languagesIds = getLanguagesIds();
const newStateChoices = getNewStateChoices();
const createdColumnIds = createAllColumns(newStateChoices);
if (Object.keys(newStateChoices).length !== createdColumnIds.length) {
ss.error('An error occurred while creating columns. The number of created columns does not match the expected number.');
}
function getBoardColumns() {
const columns = [];
const column = new SimpleRecord('board_column');
column.addQuery('board_id', BOARD_ID);
column.orderBy('order');
column.query();
while (column.next()) {
columns.push({
stateValue: column.state.value,
order: column.order,
});
}
return columns;
}
function getNewStateChoices() {
const SDLC_TASK_TABLE_ID = '169113996804005414';
const COLUMN_STATE_ID = '155931135900001086';
const boardColumns = getBoardColumns();
const choices = {};
let order = boardColumns[boardColumns.length - 1].order + 100;
const choice = new SimpleRecord('sys_choice');
choice.addQuery('table_id', SDLC_TASK_TABLE_ID);
choice.addQuery('column_id', COLUMN_STATE_ID);
choice.addQuery('value', 'NOT IN', boardColumns.map(column => column.stateValue));
choice.selectAttributes(['value', 'title', 'language']);
choice.orderBy('order');
choice.query();
while (choice.next()) {
if (!choices.hasOwnProperty(choice.value)) {
choices[choice.value] = {
title: {},
stateId: '',
order,
};
order += 100;
}
choices[choice.value].title[choice.language] = choice.title;
if (!choices[choice.value].stateId) {
choices[choice.value].stateId = choice.sys_id;
}
}
return choices;
}
function createColumn(columnParameters) {
const column = new SimpleRecord('board_column');
column.board_id = BOARD_ID;
column.state = columnParameters.stateId;
column.order = columnParameters.order;
column.active = true;
const columnId = column.insert();
if (!+columnId) {
ss.error(column.getErrors().join('; '));
}
return columnId;
}
function createAllColumns(newStateChoices) {
const createdColumnIds = [];
for (const stateChoice in newStateChoices) {
const createdColumnId = createColumn(newStateChoices[stateChoice]);
createdColumnIds.push(createdColumnId);
const titles = Object.entries(newStateChoices[stateChoice].title);
titles.forEach(titleAttributes => createTranslationForColumn(createdColumnId, titleAttributes));
}
return createdColumnIds;
}
function createTranslationForColumn(columnId, titleAttributes) {
const TITLE_COLUMN_ID = '169416863206684038';
const [language, value] = titleAttributes;
const translation = new SimpleRecord('sys_translation');
translation.column_id = TITLE_COLUMN_ID;
translation.language_id = languagesIds[language];
translation.value = value;
translation.record_id = columnId;
if (!+translation.insert()) {
ss.error(translation.getErrors().join('; '));
}
}
function getLanguagesIds() {
const languagesIds = {};
const language = new SimpleRecord('sys_language');
language.selectAttributes('language');
language.query();
while (language.next()) {
languagesIds[language.language] = language.sys_id;
}
return languagesIds;
} -
Замените
XXXXXXXXXXXXXXXXXX
в строкеconst BOARD_ID = 'XXXXXXXXXXXXXXXXXX';
на ID доски проекта. Чтобы найти его, откройте нужную доску проекта и скопируйте ID из адресной строки браузера. -
Нажмите Запустить. Сохранять запись необязательно.
-
При необходимости, повторите шаги 4-5 для всех досок проектов, в которые вам нужно добавить столбцы для новых статусов.