Введение
В ряде случаев требуется отображать записи с определённым значением атрибута типа «Список значений».
Здесь представлен пример настройки фильтрации записей связанного шаблона по значению атрибута типа «Список значений».
См. также подробное описание и другие примеры использования атрибута типа «Список значений».
Структура атрибута типа «Список значений»
- Атрибут типа «Список значений» хранит ID значения, выбранного из предварительно заданного списка.
- Список возможных значений настраивается в свойствах атрибута и не может быть изменён при выполнении приложения.
- Каждое возможное значение содержит:
- Системное имя значения.
- Отображаемые названия на русском, английском и немецком языках (достаточно указать название на одном языке).
- Цвет — числовой код в десятичном формате. Для поиска кодов цветов и их преобразования из шестнадцатеричной в десятичную форму можно воспользоваться, например, сайтом https://convertingcolors.com/.
- Значок — строка с кодом FontAwesome. Для поиска кодов значков можно воспользоваться встроенной галереей значков или сайтом https://fontawesome.com/.
Фильтрация значения атрибута с помощью 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 Overdue Просрочена Timely В срок Cancelled Отменена -
В шаблоне «Клиенты» имеется атрибут «Заявки на перевозку»:
- Тип данных: Запись
- Системное имя:
Заявкинаперевозку
- Связанный шаблон: Заявки на перевозку
- Хранить несколько значений: флажок установлен.
Распределение заявок по значению атрибута список значений
- Откройте для редактирования форму шаблона «Клиенты».
- Поместите на форму атрибут «Заявки на перевозку».
- Настройте представление атрибута «Заявки на перевозку» в виде таблицы.
- Добавьте в таблицу «Заявки на перевозку» атрибут «Статус».
- Добавьте в область кнопок таблицы «Заявки на перевозку» кнопку «Создать».
- Поместите повторно на форму атрибут «Заявки на перевозку».
-
Настройте свойства поля «Заявки на перевозку»:
- Отображаемое название: Просроченные заявки
- Представление: таблица
- Фильтр — Отображаемые записи: N3
# Импортируем функции для работы
# с записями, строками и базой данных.
@prefix object: <http://comindware.com/ontology/object#>.
@prefix convert: <http://comindware.com/logics/convertions#>.
{
# Находим атрибут «Заявки на перевозку» в шаблоне «Клиенты».
("Клиенты" "Заявкинаперевозку") object:findProperty ?TransportRequestsAttribute.
# Находим атрибут «Статус» в шаблоне «Заявки на перевозку».
("Заявкинаперевозку" "Статус") object:findProperty ?StatusAttribute.
# Берём значения ?TransportRequestsAttribute
# и помещаем в ?TransportRequestsValue.
?item ?TransportRequestsAttribute ?TransportRequestsValue.
# Находим ID значения Overdue «Просрочена»
# атрибута «Статус».
("Статус" "Overdue") convert:enumValue ?enumIdOverdue.
# Фильтруем ?TransportRequestsValue
# по значению ?StatusAttribute равному ?enumIdOverdue.
?TransportRequestsValue ?StatusAttribute ?enumIdOverdue.
# Возвращаем отфильтрованные значения из ?TransportRequestsValue.
?TransportRequestsValue -> ?value.
}
-
Сохраните форму.
Тестирование
- Создайте запись в шаблоне «Клиенты».
- Создайте несколько связанных записей в таблице атрибута «Заявки на перевозку», выбрав разные статусы заявок, включая «Просрочена».
- В таблице «Просроченные заявки» должны отобразиться соответствующие заявки.