Тип данных Категория представляет собой список вариантов, из которых выбирается один или несколько. Вы можете
получать, передавать и фильтровать их с помощью скриптов. Для этого используются:
Из поля типа Категория можно получить все варианты с их названиями и кодами. Например, чтобы при нажатии кнопки на
странице записать варианты в поле типа Строка, привяжите к кнопке скрипт:
asyncfunctionshowCategoryProperties(): 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`;
}
Вы можете получать варианты категории, указанные пользователем. Предположим, на странице сотрудник выбирает значения в
поле типа Категория и нажимает кнопку. Тогда названия вариантов и их коды выводятся в поле типа Строка. Для
этого к кнопке привяжите скрипт:
для поля типа Категория (одиночный):
asyncfunctionshowSelectedOption(): 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`
}
для поля типа Категория (множественный):
asyncfunctionshowSelectedOptions(): 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`
}
Вы можете создавать варианты категории динамически с помощью скрипта, например, при открытии страницы. Для этого
добавьте в её контекст переменную типа Категория без указания вариантов и настройте её заполнение:
asyncfunctiononInit() {
// Создаём исходный массив с вариантамиconst categoryArray = ['ремонт', 'осмотр', 'замена'];
// Преобразуем массив строк в массив вариантов для поля Категория
Context.fields.category.data.variants = categoryArray.map((name): TEnum<any> => ({
name: name,
code: name,
}));
}
В скрипте можно задать условия и отобразить только нужные варианты категории на странице или форме. Допустим, если
пользователь заполняет поле типа Строка, то из поля типа Категория исключается часть вариантов. Для этого в
настройках переменной типа Строка в опции Событие при изменении значения привяжите функцию:
asyncfunctionconditionChange(): 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');
}
// Если пользователь не заполнил поле для условия, отображаются все варианты
}
Начало работы с типом данных «Категория»
Тип данных Категория представляет собой список вариантов, из которых выбирается один или несколько. Вы можете получать, передавать и фильтровать их с помощью скриптов. Для этого используются:
Получение всех вариантов категории
Из поля типа Категория можно получить все варианты с их названиями и кодами. Например, чтобы при нажатии кнопки на странице записать варианты в поле типа Строка, привяжите к кнопке скрипт:
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'); } // Если пользователь не заполнил поле для условия, отображаются все варианты }