Атрибут типа «Список значений». Вычисление текстового значения и фильтрация с помощью N3 и формул
Введение
Для каждого значения атрибута типа «Список значений» могут быть заданы названия на русском, английском и немецком языках.
Здесь представлен пример извлечения значения атрибута типа «Список значений» на определённом языке с помощью N3, сравнения его значения с требуемым с помощью формулы и фильтрации записей в таблице по значению такого атрибута с помощью N3.
См. также:
- Подробное описание и другие примеры использования атрибута типа «Список значений»
- Фильтрация связанных записей по значению атрибута типа «Список значений» с помощью N3
- Пример настройки интерфейса приложения на нескольких языках
Структура атрибута типа «Список значений»
- Атрибут типа «Список значений» хранит ID значения, выбранного из предварительно заданного списка.
- Список возможных значений настраивается в свойствах атрибута и не может быть изменён при выполнении приложения.
- Каждое возможное значение содержит:
- Системное имя значения.
- Отображаемые названия на русском, английском и немецком языках (достаточно указать название на одном языке).
- Цвет — числовой код в десятичном формате. Для поиска кодов цветов и их преобразования из шестнадцатеричной в десятичную форму можно воспользоваться, например, сайтом https://convertingcolors.com/.
- Значок — строка с кодом FontAwesome. Для поиска кодов значков можно воспользоваться встроенной галереей значков или сайтом https://fontawesome.com/.
Получение значения атрибута на определённом языке с помощью 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.
Сравнение и фильтрация значения атрибута с помощью формулы
С помощью формулы сравнить значение атрибута типа «Список значений» с требуемым можно по системному имени значения следующими способами:
-
равенство
$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 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.}
Прикладная задача
Имеется процесс оформления заявок на перевозку.
Тип транспортного средства в заявке задаётся атрибутом типа «Список значений».
Требуется распределять заявки в разным исполнителям в зависимости от выбранного типа ТС.
Требуется формировать таблицу со списком заявок на легковые автомобили, включая столбец с типом ТС на русском языке.
Исходные данные
- Имеются шаблон записи «Заявки на перевозку» (с системным именем
Заявкинаперевозку) и связанный с ним шаблон процесса «Обработка заявок». - В шаблоне «Заявки на перевозку» есть атрибут «Тип ТС» типа «Список значений» с системным именем
ТипТСи следующими значениями:
| Системное имя | RU |
|---|---|
| Bus | автобус |
| Car | легковой автомобиль |
| Truck | грузовой автомобиль |
Настройка получения текстового значения атрибута типа «Список значений» на определённом языке
-
В шаблоне «Заявки на перевозку» создайте атрибут со следующими свойствами:
- Название: Наименование типа ТС
- Тип данных: текст
- Вычислять автоматически: флажок установлен
- Вычисляемое выражение: N3
# Импортируем функции для работы# с записями, строками и базой данных.@prefix object: <http://comindware.com/ontology/object#>.@prefix cmw: <http://comindware.com/logics#>.@prefix l10n: <http://comindware.com/ontology/l10n#>.@prefix string: <http://www.w3.org/2000/10/swap/string#>.@prefix cmwentity: <http://comindware.com/ontology/entity#>.{# Находим атрибут «Тип ТС» в шаблоне «Заявки на перевозку».("Заявкинаперевозку" "ТипТС") object:findProperty ?TipTSAttribute.# Присваиваем переменной ?TipTSAttributeValues# объект со списком значений атрибута «Тип ТС».?item ?TipTSAttribute ?TipTSAttributeValues.# Присваиваем переменной ?SelectedValue# объект с выбранным значением атрибута.?TipTSAttributeValues cmw:variantName ?SelectedValue.# Присваиваем переменной ?names массив объектов# с заполненными названиями значения атрибута на всех языках.?SelectedValue l10n:text ?names.# Начинаем цикл по ?names# Присваиваем переменной ?langCodeStr код языка# названия значения атрибута на текущей итерации цикла.?names l10n:lang ?langCode.("{0}" ?langCode) string:format ?langCodeStr.# Сравниваем код языка для значения атрибута с желаемым.# "ru" — код русского языка, "en" — английского, "de" — немецкого.?langCodeStr cmwentity:contains "ru".# Если предыдущее предложение возвращает true,# записываем значение на русском языке в вычисляемый атрибут.?names l10n:data ?value.# переходим к следующей итерации по ?names.} -
Поместите атрибуты «Тип ТС» и «Наименование типа ТС» на форму начального события диаграммы процесса «Обработка заявок».
Настройка распределения заявок по значению атрибута типа «Список значений»
- На диаграмме процесса «Обработка заявок» после начального события добавьте развилку «или/или».
- Добавьте три потока управления и присоедините к ним пользовательские задачи «Обработать заявку на автобус», «Обработать заявку на легковой автомобиль», «Обработать заявку на грузовой автомобиль».
-
В дополнительных свойствах всех задач задайте формулу для заголовка задачи:
FORMAT("Обработайте заявку на перевозку: {0}", LIST($НаименованиетипаТС)) -
После каждой пользовательской задачи добавьте конечное событие.
-
Настройте исходящие потоки в дополнительных свойствах развилки «или/или» следующим образом:
Поток «Иначе» Конечная точка Условие Обработать заявку на автобус Формула: $ТипТС == "Bus"Обработать заявку на легковой автомобиль Формула: $ТипТС == "Car"Флажок установлен Обработать заявку на грузовой автомобиль -
Опубликуйте процесс.

Фильтрация записей по значению атрибута «Список значений»
- В шаблоне «Заявки на перевозку» создайте таблицу «Заявки на легковые автомобили».
- Добавьте в таблицу атрибут «Тип ТС».
- Сохраните таблицу.
- Откройте панель основных свойств таблицы.
-
В поле «Системный фильтр» введите следующее выражение N3:
# Импортируем функции для работы# с записями, строками и базой данных.@prefix convert: <http://comindware.com/logics/convertions#>.@prefix object: <http://comindware.com/ontology/object#>.{# Находим атрибут «Тип ТС»# в шаблоне «Заявки на перевозку».("Заявкинаперевозку" "ТипТС") object:findProperty ?TipTSAttribute.# Находим ID значения Car (легковой автомобиль)# атрибута «Тип ТС».("ТипТС" "Car") convert:enumValue ?enumIdCar.# Возвращаем записи, у которых# значение атрибута «Тип ТС»# равно Car (легковой автомобиль).?item ?TipTSAttribute ?enumIdCar.} -
Сохраните таблицу.
Тестирование
- Создайте заявку и выберите тип ТС «автобус».
- На странице «Мои задачи» должна появиться задача с заголовком «Обработайте заявку на перевозку: автобус».
- Создайте вторую заявку и выберите тип ТС «легковой автомобиль».
- На странице «Мои задачи» должна появиться с заголовком «Обработайте заявку на перевозку: легковой автомобиль».
- Создайте третью заявку и выберите тип ТС «грузовой автомобиль».
- На странице «Мои задачи» должна появиться задача с заголовком «Обработайте заявку на перевозку: грузовой автомобиль».
- Перейдите к экземплярам записи шаблона «Заявки на обработку».
- Откройте таблицу «Заявки на легковой автомобиль».
- Отобразится список заявок на легковой автомобиль.
Эта статья была полезна 1 чел.