Атрибут типа «Список значений»
Описание атрибута
Структура атрибута типа «Список значений»
- Атрибут типа «Список значений» хранит ID значения, выбранного из предварительно заданного списка.
- Список возможных значений настраивается в свойствах атрибута и не может быть изменён при выполнении приложения.
- Каждое возможное значение содержит:
- Системное имя значения.
- Отображаемые названия на русском, английском и немецком языках (достаточно указать название на одном языке).
- Цвет — числовой код в десятичном формате. Для поиска кодов цветов и их преобразования из шестнадцатеричной в десятичную форму можно воспользоваться, например, сайтом https://convertingcolors.com/.
- Значок — строка с кодом FontAwesome. Для поиска кодов значков можно воспользоваться встроенной галереей значков или сайтом https://fontawesome.com/.
Получение данных из атрибута с помощью формулы
С помощью формулы для атрибута типа «Список значений» можно получить:
-
ID текущего значения атрибута:
$EnumAttributeSystemName—>cmw.variantName -
системное имя значения атрибута:
$EnumAttributeSystemName—>cmw.variantAlias -
код значка значения атрибута:
$EnumAttributeSystemName—>cmw.variantIcon -
цвет значения атрибута в десятичном формате:
$EnumAttributeSystemName—>cmw.color
Установка значения атрибута с помощью формулы
Чтобы c помощью формулы задать значение атрибута типа «Список значений» (например, для вычисляемого атрибута или правила на форме), необходимо:
-
вернуть ID требуемого значения атрибута, указав системные имена атрибута и требуемого значения:
ID(ENUMVALUE("EnumAttributeSystemName", "EnumValueSystemName"))
Сравнение значения атрибута с помощью формулы
С помощью формулы сравнить значение атрибута типа «Список значений» с требуемым можно по системному имени значения следующими способами:
-
равенство
$EnumAttributeSystemName == EnumValueSystemNameили
EQUALS($EnumAttributeSystemName->cmw.variantAlias, "EnumValueSystemName")или
EQUALS($EnumAttributeSystemName, ENUMVALUE("EnumAttributeSystemName", "EnumValueSystemName")) -
неравенство
$EnumAttributeSystemName !== EnumValueSystemNameили
NOT(EQUALS($EnumAttributeSystemName->cmw.variantAlias, "EnumValueSystemName"))или
NOT(EQUALS($EnumAttributeSystemName, ENUMVALUE("EnumAttributeSystemName", "EnumValueSystemName")))
Префиксы N3 для работы с атрибутом
Для работы с атрибутом типа «Список значений» в выражениях на N3 (например, в сценариях) могут потребоваться следующие префиксы:
@prefix object: <http://comindware.com/ontology/object#>.
@prefix cmw: <http://comindware.com/logics#>.
@prefix l10n: <http://comindware.com/ontology/l10n#>.
@prefix cmwentity: <http://comindware.com/ontology/entity#>.
@prefix string: <http://www.w3.org/2000/10/swap/string#>.
@prefix convert: <http://comindware.com/logics/convertions#>.
Получение данных из атрибута с помощью N3
С помощью N3 для атрибута типа «Список значений» можно получить:
-
ID определённого значения:
("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId. -
объект с атрибутом:
("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute. -
из объекта с атрибутом — массив возможных значений атрибута в текущей записи:
?item ?enumAttribute ?enumAttributeValues.Из этого массива можно получить:
-
ID текущего значения атрибута:
?enumAttributeValues cmw:variantName ?enumValueId. -
системное имя значения атрибута:
?enumAttributeValues cmw:variantAlias ?enumValueSystemName. -
код значка значения атрибута:
?enumAttributeValues cmw:variantIcon ?enumValueIcon. -
цвет значения атрибута в десятичном формате:
?enumAttributeValues cmw:color ?enumValueColor.
-
Получение значения атрибута на определённом языке с помощью N3
С помощью N3 для атрибута типа «Список значений» можно получить названия значения атрибута на английском, русском и немецком языках:
# Находим атрибут EnumAttributeSystemName в шаблоне TemplateSystemName.
("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.
# Присваиваем переменной ?enumAttributeValues
# объект со списком значений атрибута.
?item ?enumAttribute ?enumAttributeValues.
# Присваиваем переменной ?enumValueId
# объект с выбранным значением атрибута.
?enumAttributeValues cmw:variantName ?enumValueId.
# Присваиваем переменной ?enumAttributeValues массив объектов
# с заполненными названиями значения атрибута на всех языках.
?enumValueId l10n:text ?enumValueLanguageVersions.
# Начинаем цикл по ?enumValueLanguageVersions
# Присваиваем переменной ?langCodeStr код языка
# названия значения атрибута на текущей итерации цикла.
?enumValueLanguageVersions l10n:lang ?langCode.
("{0}" ?langCode) string:format ?langCodeStr.
# Сравниваем код языка для значения атрибута с желаемым.
# "ru" — код русского языка, "en" — английского, "de" — немецкого.
?langCodeStr cmwentity:contains "ru".
# Если предыдущее предложение возвращает true,
# записываем значение на русском языке в вычисляемый атрибут.
?names l10n:data ?value.
# переходим к следующей итерации по ?enumValueLanguageVersions.
Установка значения атрибута с помощью N3
Чтобы c помощю N3 задать значение атрибута типа «Список значений» (например, для вычисляемого атрибута или правила на форме), необходимо:
-
получить ID требуемого значения атрибута:
("EnumAttributeSystemName" "ValueSystemName") convert:enumValue ?enumValueId. -
вернуть полученный ID:
?enumIdOverdue -> ?value.
Сравнение значения атрибута с помощью N3
С помощью N3 для атрибута типа «Список значений» можно выполнять сравнение по системному имени его значения:
-
Сравнение значения атрибута с требуемым:
@prefix object: <http://comindware.com/ontology/object#>.@prefix cmw: <http://comindware.com/logics#>.{# Получаем атрибут типа «Список значений» из шаблона по системному имени.("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.# Получаем коллекцию возможных значений атрибута.?item ?enumAttribute ?enumAttributeValues.# Получаем системное имя значения атрибута в текущей записи.?enumAttributeValues cmw:variantAlias ?enumValueSystemName.# Сравниваем системное имя значения атрибута с требуемым# и возвращаем результат.if{?enumValueSystemName == "targetValueSystemName".}then{true -> ?value.}else{false -> ?value.}}
Фильтрация значения атрибута с помощью N3
С помощью N3 для атрибута типа «Список значений» можно выполнять фильтрацию по системному имени его значения:
-
Фильтрация (в таблице шаблона) записей с требуемым значением атрибута:
@prefix convert: <http://comindware.com/logics/convertions#>.@prefix object: <http://comindware.com/ontology/object#>.{# Получаем атрибут типа «Список значений» из шаблона по системному имени.("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.# Получаем ID значения атрибута по системному имени.("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.# Возвращаем записи, у которых атрибут имеет значение "enumValueSystemName".?item ?enumAttribute ?enumValueId.} -
Фильтрация добавляемых записей (в таблице на форме или раскрывающемся списке на форме) записей с требуемым значением атрибута:
@prefix convert: <http://comindware.com/logics/convertions#>.@prefix object: <http://comindware.com/ontology/object#>.{# Получаем атрибут типа «Список значений» из шаблона по системному имени.("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.# Получаем ID значения атрибута по системному имени.("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.# Фильтруем и возвращаем записи,# у которых атрибут имеет значение "enumValueSystemName".?filteredRecordIds ?enumAttribute ?enumValueId.?filteredRecordIds -> ?value.} -
Фильтрация отображаемых записей (в таблице на форме, раскрывающемся списке на форме, вычисляемом атрибуте или правиле для формы) записей с требуемым значением атрибута:
@prefix convert: <http://comindware.com/logics/convertions#>.@prefix object: <http://comindware.com/ontology/object#>.{# Получаем атрибут типа «Запись» из шаблона с коллекцией записей.("ParentTemplateSystemName" "RecordAttributeSystemName") object:findProperty ?RecordAttribute.# Получаем атрибут типа «Список значений» из связанного шаблона по системному имени.("LinkedTemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.# Получаем ID значения атрибута по системному имени.("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.# Получаем коллекцию записей из атрибута RecordAttribute.?item ?RecordAttribute ?filteredRecordIds.# Фильтруем и возвращаем записи,# у которых атрибут имеет значение "enumValueSystemName".?filteredRecordIds ?enumAttribute ?enumValueId.?filteredRecordIds -> ?value.}
Настройка свойств атрибута
Помимо общих свойств для атрибута типа «Список значений» предусмотрены перечисленные ниже свойства.
-
Вкладка «Свойства»
- «Вычислять автоматически» — установите этот флажок, чтобы значение атрибута вычислялось во время работы приложения. См. «Вычисляемые атрибуты».
- Формат отображения:
- Текст — значения атрибута будут отображаться в виде простого текста;
- Индикатор — перед значением атрибута будет отображаться кружок (если не задан значок) или значок заданного цвета;
- Бейдж — значение и значок атрибута будут отображаться на подложке заданного цвета. См. пример.

Свойства атрибута типа «Список значений» -
Вкладка «Список значений»
- Системное имя (обязательное поле) — системное имя элемента списка.
- EN — английское название пункта в списке.
- DE — немецкое название пункта в списке.
- RU — русское название пункта в списке.
- Цвет — цвет, которым будет отображаться значение атрибута.
- Значок — значок, который будет отображаться рядом со значением атрибута.

Список значений
Создание элементов списка значений
- На вкладке «Список значений» нажмите кнопку «Создать».
- Нажмите поле «Системное имя» и введите системное имя элемента списка.
- Нажмите поле «EN» и введите английское отображаемое название пункта в списке.
- Нажмите поле «RU» и введите русское отображаемое название пункта в списке.
- Нажмите поле «Цвет» и выберите цвет пункта в списке.
- Нажмите поле «Значок» и выберите значок пункта в списке.
- Повторите шаги 1–5, чтобы создать остальные элементы списка.
- Нажмите кнопку «Сохранить», чтобы сохранить атрибут.

Удаление элементов из списка значений
- На вкладке «Список значений» установите флажки выбора для элементов, подлежащих удалению.
- Нажмите кнопку «Удалить».
- В отобразившемся окне подтверждения нажмите кнопку «Удалить».
- Нажмите кнопку «Сохранить», чтобы сохранить атрибут.

Примеры использования
Ознакомьтесь с перечисленными ниже подробными статьями, а также простейшим примером настройки атрибута типа «Список значений».
- Вычисление текущего значения
- Вычисление значения по справочнику
- Фильтрация связанных записей по значению атрибута с помощью N3
- Вычисление значения с помощью N3 и формул
Выбор типа ТС из списка значений на форме
Исходные данные
В приложении настроен и помещён на форму следующий атрибут:
-
Тип транспортного средства
- Тип данных: список значений
- Формат отображения: бейдж
- Список значений:
Системное имя EN RU Цвет Значок busBus Автобус #ff0000 bus passengerCarCar Легковой автомобиль #0000ff car truckTruck Грузовик #00ff00 truck vanMinivan Микроавтобус #ffff00 van-shuttle
Результирующее поведение
- Поле «Тип транспортного средства» будет отображаться как раскрывающийся список с названиями и значками автомобилей, пункты списка будут окрашены указанными цветами:

Эта статья была полезна 1 чел.