Перейти к основному содержимому
Версия: 1.2.2

Настройка статусной модели

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

предупреждение

Принимая решение о настройке статусной модели, обратите внимание на следующее:

  • Изменение статусной модели нарушит работу некоторых возможностей SDLC, таких как пополнение бэклога и планирование спринтов. Подробнее см. ниже.
  • Внесенные изменения могут быть перезаписаны при последующих обновлениях приложения.

Никогда не изменяйте системные значения коробочных статусов.

Настройка статусной модели задач включает в себя следующие этапы:

  1. Создание необходимых опций выбора для поля Статус
  2. Настройка переходов для созданных статусов
  3. Вынесение новых статусов на доску

Создание опций выбора


предупреждение

Перед созданием опций выбора убедитесь, что в Настройках администратора боковой панели выбрано приложение SDLC.

Чтобы создать опции выбора для нового статуса, выполните следующие действия:

  1. В навигаторе перейдите в Настройка системыВсе таблицы.

  2. Найдите в списке таблицу Задачи (task) и перейдите на ее форму.

  3. Перейдите в область Связанные списки и откройте вкладку Колонки.

  4. Найдите колонку Статус (state) и перейдите на ее форму.

  5. Перейдите в область Связанные списки и откройте вкладку Выбор.

  6. Нажмите Создать и заполните поля:

    ПолеОписание
    ТаблицаВыберите таблицу Задачи SDLC (pda_backlog_item) или Подзадачи (pda_subtask) в зависимости от того, какую модель вам нужно настроить.
    ЗаголовокУкажите заголовок статуса. Рекомендуется задать заголовок, уникальный в рамках выбранной Таблицы.
    Язык

    Укажите язык, для которого создается статус:

    • ru – для русского языка
    • en – для английского
    ЗначениеВведите значение, которое будет использоваться в системной логике. Используйте латинские буквы и цифры. Значение не должно совпадать со значениями коробочных статусов. Рекомендуется задать значение, уникальное в рамках выбранной Таблицы.
    ПорядокУкажите число, чтобы определить положение нового статуса в выпадающем списке по отношению к уже существующим. Статусы располагаются в списке по возрастанию. Рекомендуется присваивать значения с шагом 10, если статус находится между двумя другими, и 100, если он располагается в конце списка.
  7. Нажмите Сохранить или Сохранить и выйти, чтобы применить изменения.

  8. При необходимости, повторите шаги 6–7 для всех языков, используемых в системе. В результате для каждого статуса должны быть созданы опции выбора для каждого языка, отличающиеся только значениями полей Заголовок и Язык.

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

подсказка

Подробнее о создании опций выбора читайте в статье Поля выбора.

Настройка статусных переходов


предупреждение

Добавление статусов нарушит работу некоторых возможностей системы в указанных ниже условиях.

При добавлении нового статуса перед коробочными статусами Новый или Бэклог:

  • В быстрых фильтрах в интерфейсе пополнения бэклога / планирования спринтов не будут отображаться задачи в новых статусах.
  • Количество незавершенных задач при выпуске релиза будет подсчитываться неправильно.
  • Может нарушиться поведение, при котором статус задачи меняется с Новый на Бэклог при запуске спринта.
  • Может быть нарушена работа некоторых полей на формах задач.

При добавлении нового статуса между коробочными статусами Бэклог и Готово:

  • В быстрых фильтрах Все доступные задачи и Текущие задачи проекта в интерфейсе пополнения бэклога / планирования спринтов не будут отображаться задачи в новых статусах.
  • Количество незавершенных задач при выпуске релиза будет подсчитываться неправильно.
  • Может быть нарушена работа некоторых полей на формах задач.

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

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

  1. В навигаторе перейдите в Настройки переходовСтатусные модели.

  2. Найдите в списке запись Backlog item (для задач SDLC) или Subtask (для подзадач) и перейдите на ее форму.

  3. Перейдите в область Связанные списки и откройте вкладку Статусные переходы.

  4. Создайте входящие переходы:

    1. Откройте форму статуса, из которого вам нужно создать переход в новый статус.
    2. Добавьте новый статус в поле Доступные переходы и нажмите Сохранить.
  5. Вернитесь на форму статусной модели и при необходимости повторите шаг 4 для всех входящих переходов.

  6. Создайте исходящие переходы:

    1. Нажмите создать в связанном списке Статусные переходы.
    2. В поле Статус укажите новый статус.
    3. В поле Доступные переходы добавьте все статусы, в которые вам нужно сделать доступным переход из нового статуса.
    4. Нажмите Сохранить.
подсказка

Подробнее о настройке статусных моделей читайте в статье Настройки переходов

Вынесение новых статусов на доску


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

  1. Перейдите в Настройка системыСерверные скрипты.

  2. Нажмите Создать.

  3. Замените текст в поле Скрипт на следующий:

    Скрипт для добавления статусов на существующую доску

    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;
    }

  4. Замените XXXXXXXXXXXXXXXXXX в строке const BOARD_ID = 'XXXXXXXXXXXXXXXXXX'; на ID доски проекта. Чтобы найти его, откройте нужную доску проекта и скопируйте ID из адресной строки браузера.

  5. Нажмите Запустить. Сохранять запись необязательно.

  6. При необходимости, повторите шаги 4-5 для всех досок проектов, в которые вам нужно добавить столбцы для новых статусов.