Введение
Для каждого значения атрибута типа «Список значений» могут быть заданы названия на русском, английском и немецком языках.
Здесь представлен пример извлечения значения атрибута типа «Список значений» на определённом языке с помощью 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.
}
-
Сохраните таблицу.
Тестирование
- Создайте заявку и выберите тип ТС «автобус».
- На странице «Мои задачи» должна появиться задача с заголовком «Обработайте заявку на перевозку: автобус».
- Создайте вторую заявку и выберите тип ТС «легковой автомобиль».
- На странице «Мои задачи» должна появиться с заголовком «Обработайте заявку на перевозку: легковой автомобиль».
- Создайте третью заявку и выберите тип ТС «грузовой автомобиль».
- На странице «Мои задачи» должна появиться задача с заголовком «Обработайте заявку на перевозку: грузовой автомобиль».
- Перейдите к экземплярам записи шаблона «Заявки на обработку».
- Откройте таблицу «Заявки на легковой автомобиль».
- Отобразится список заявок на легковой автомобиль.