Начало работы с типом данных «Категория»

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

  • свойство типа Категория EnumField.variants — все варианты категории;
  • свойства варианта:

Получение всех вариантов категории

Из поля типа Категория можно получить все варианты с их названиями и кодами. Например, чтобы при нажатии кнопки на странице записать варианты в поле типа Строка, привяжите к кнопке скрипт:

async function showCategoryProperties(): Promise<void> {
    // Получаем массив всех названий вариантов категории и преобразуем их в строку 
    const allCategoryValues = Context.fields.category.data.variants.map(v => v.name).join(', ');
    // Получаем массив всех кодов вариантов категории и преобразуем их в строку
    const allCategoryCodes = Context.fields.category.data.variants.map(v => v.code).join(', ');
    // Указываем переменную типа Строка для хранения результата
    Context.data.category_properties = ``;
    // Добавляем в результат все названия вариантов
    Context.data.category_properties += `Варианты: ${allCategoryValues}\n`;
    // Добавляем в результат все коды вариантов
    Context.data.category_properties += `Коды: ${allCategoryCodes}\n\n`;
}

Получение выбранных пользователем вариантов категории

Вы можете получать варианты категории, указанные пользователем. Предположим, на странице сотрудник выбирает значения в поле типа Категория и нажимает кнопку. Тогда названия вариантов и их коды выводятся в поле типа Строка. Для этого к кнопке привяжите скрипт:

  • для поля типа Категория (одиночный):
async function showSelectedOption(): Promise<void> {
    // Указываем переменную типа Строка для хранения результата 
    Context.data.selected_option = ``;
    // Получаем название выбранного варианта категории и добавляем в поле типа Строка
    // Если название не указано, выводим надпись «не задано»
    Context.data.selected_option += `Выбранный вариант: ${Context.data.category?.name ? Context.data.category.name : 'не задано'}\n`
    // Получаем код выбранного варианта категории и добавляем в поле типа Строка
    // Если код не указан, выводим надпись «не задано»
    Context.data.selected_option += `Код выбранного варианта: ${Context.data.category?.code ? Context.data.category.code : 'не задано'}\n`
}
  • для поля типа Категория (множественный):
async function showSelectedOptions(): Promise<void> {
    // Получаем массив значений выбранных вариантов и преобразуем в строку
    const allSelectedValues = Context.data.multi_category?.map(v => v.name).join(', ');
    // Получаем массив кодов выбранных вариантов и преобразуем их в строку
    const allSelectedCodes = Context.data.multi_category?.map(v => v.code).join(', ');
    // Указываем переменную типа Строка для хранения результата
    Context.data.selected_options = ``;
    // Добавляем в результат значения выбранных вариантов
    Context.data.selected_options += `Выбранные варианты: ${allSelectedValues}\n`
    // Добавляем в результат коды выбранных вариантов
    Context.data.selected_options += `Коды выбранных вариантов: ${allSelectedCodes}\n`
}

Создание новых вариантов категории через скрипт

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

async function onInit() {
    // Создаём исходный массив с вариантами
    const categoryArray = ['ремонт', 'осмотр', 'замена'];
    // Преобразуем массив строк в массив вариантов для поля Категория
    Context.fields.category.data.variants = categoryArray.map((name): TEnum<any> => ({
        name: name,
        code: name,
    }));
}

Фильтрация значений из категории

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

async function conditionChange(): Promise<void> {
    // Проверяем наличие значения в поле, которое заполняет пользователь
    if (Context.data.condition) {
        // Фильтруем варианты категории. Оставляем только те опции, у которых код не `repair` и не `replace`
        Context.fields.category.data.variants = Context.fields.category.data.variants.filter(t => t.code !== 'repair' && t.code !== 'replace');
    }
    // Если пользователь не заполнил поле для условия, отображаются все варианты
}