- Создатель Васильев Антон, отредактировано 05.10.2022
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим просмотр истории страницы
« Предыдущий Версия 20 Следующий »
Краткое описание
Представления, используемые AF5, называются коллекциями. В отличие от обычных представлений реляционной БД, коллекции AF5 не хранятся в самой БД, а хранятся в конфигурационных файлах.
<collection name="{name}" idField="id" replace="runtime"> <prototype> <![CDATA[SELECT role.id, role.id_type as typeId, '<id>' as open_id_tag, ':' as separate, '</>' as close_id_tag, '<basedocid>' AS basedocid_1, ss_module_org.Module, role.fullname as fullname FROM so_role role natural join so_unit left join so_structureunit su on su.id = role.headorbranchoffice ::from-clause WHERE role.accessredirect is null ::where-clause]]> </prototype> <counting-prototype> <![CDATA[SELECT COUNT(*) FROM (SELECT role.id, role.id_type as typeId, '<id>' as self_1, ':' as self_2, '</>' as close_tag, '<basedocid>' AS basedocid_1, ss_module_org.Module, role.fullname as fullname FROM so_role role natural join so_unit left join so_structureunit su on su.id = role.headorbranchoffice ::from-clause WHERE role.accessredirect is null ::where-clause)]]> </counting-prototype> <filter name="MODULE"> <reference placeholder="from-clause"> <![CDATA[ join SS_ModuleOrg ss_module_org on ss_module_org.Organization = role.organization join ss_module ss_module on ss_module_org.module = ss_module.id join ss_moduletype ss_moduletype on ss_module.type = ss_moduletype.id and ss_moduletype.alias ='SO']]> </reference> <criteria placeholder="where-clause"> <![CDATA[ ss_module_org.Module = {0} ]]> </criteria> </filter> <!-- Фильтр по колонке. Полное совпадение --> <filter name="fullname"> <criteria placeholder="where-clause"> <![CDATA[ t.fullname = {0} ]]> </criteria> </filter> <!-- Фильтр по колонке. Частичное совпадение --> <filter name="fullname_partial"> <criteria placeholder="where-clause"> <![CDATA[ t.fullname ~* ('(^|\W)'||trim({0})) ]]> </criteria> </filter> <!-- Поиск по представлению --> <filter name="CQSEARCH"> <criteria placeholder="where-clause"> <![CDATA[ fullname ~* ('(^|\W)'||trim({0})) ]]> </criteria> </filter> </collection>
attributes
Параметры | Описание |
---|---|
name | Имя коллекции. Обязательный атрибут, каждая коллекция в системе должна иметь уникальное значение. |
replace | Определяет возможность «горячего» замещения конфигурации коллекции при загрузке обновленной конфигурации коллекции. runtime – разрешена, иначе – запрещена. |
idField | Колонка результирующей выборки SQL-запроса, значения из которой будут использованы в качестве идентификаторов записей. |
useClone | Флаг, если true, при отсутствии открытой транзакции новой перед вызовом открываться не будет, а при ее наличии произойдет ошибка. |
transactionCache | Флаг, enabled/disabled, включает/выключает кэширование результирующей выборки на период открытой транзакции |
prototype
Заготовка основного SQL-запроса Коллекции. Содержит опорные заглушки для фильтров (должны начинаться с двойного двоеточия и могут содержать только буквы, цифры и дефисы).
counting-prototype
Заготовка SQL-запроса, возвращающего количество записей, возвращаемых основным запросом. Также содержит опорные заглушки для фильтров.
filter
Фильтр. Параметризируемый фрагмент SQL, который вливается в заготовку и модифицирует условие выборки. Множественный.
Параметры | Описание |
---|---|
name | Имя фильтра. Обязательный атрибут, каждый фильтр в коллекции должен иметь уникальное значение. Кроме стандартных фильтров, которые вызываются при поиске по полному совпадению (по равенству ключу), существуют фильтры частичного совпадения, которые вызываются при менее строгих условиях поиска. Фильтры частичного совпадения должны иметь имя в определенном формате, чтобы быть распознанными: <Имя основного фильтра> + <Суффикс фильтра частичного совпадения>. |
Если фильтр для соответствующего типа условия или главный фильтр не заданы, условие фильтрации будет сгенерировано. В большинстве случаев, когда не используются вычисляемые поля или оптимизации SQL –запросов, сгенерированные условия будут корректными и в конфигурации коллекции элементы фильтров допустимо полностью опускать.
Тип фильтра | Суффикс | Автоматически генерируемое условие | Комментарий |
---|---|---|---|
Полное равенство | Имя_поля = {0} | Используется при поиске по ключу во всех системных представлениях. | |
Строковое значение начинается со значения ключа | _partial | Имя_поля ~* ('(^|\W)'||{0}) | Используется при поиске по ключу в некоторых системных представлениях. |
Больше или равно | _GE | Имя_поля >= {0} | Используется при быстром поиске в пользовательских коллекциях. |
Меньше | _L | Имя_поля < {0} | Используется при быстром поиске в пользовательских коллекциях. |
Имя поля представления может быть произвольным, однако необходимо учитывать следующее:
- Имя элемента фильтра в конфигурации коллекции может содержать только буквы латиницы, поэтому, если имя поле содержит какие-то символы не из этого множества, и для него необходимо явно задать фильтр, он не может быть привязан автоматически (поскольку у него не может быть имени, совпадающего с именем поля), и должен быть привязан через параметр filterName дополнительной конфигурации представления.
- Если имя поля содержит какие-то специальные символы, недопустимые для идентификатора SQL-стандартом (например, $) или является ключевым словом SQL (например, "value"), его необходимо брать в двойные кавычки в Sql-запросе, иначе произойдет ошибка при проверке синтаксиса запроса. Если по полю необходимо осуществлять сортировку, то необходимо в дополнительной конфигурации представления указать caseSensitiveFieldNames = true. Также с такими полями нельзя использовать генерируемые фильтры.
Некоторые фильтры конфигурации коллекции AF5 являются системными. К ним относятся фильтры:
- MODULE (с сохранением регистра). Фильтр по идентификатору доменного объекта модуля. С помощью него отфильтровываются объекты, не относящиеся к модулю представления. Используется для представлений разных модулей она должна содержать фильтр MODULE, содержащий фрагмент SQL, ограничивающий выборку теми объектами, значение поля Module которых соответствует переданному системой.
CQSEARCH (с сохранением регистра). Фильтр по представлению. Содержит фрагмент SQL, который ищет информацию по совокупности полей.
t.moduleType ~* ('(^|\W)'||trim({0})) OR t.moduleName ~* ('(^|\W)'||trim({0})) OR t.complect ~* ('(^|\W)'||trim({0}))
reference
Содержит произвольный фрагмент sql, который может содержать заглушки для параметров запроса вида {натуральное число}
Параметры | Описание |
---|---|
placeholder | Идентификатор опорной заглушки, которая используется для определения места вставки фрагмента при применении фильтра. |
criteria
Содержит фрагмент sql, вычисляющий условие. Если используется, присоединяется к запросу с помощью ключевого слова AND. Может быть параметризован аналогично reference.
Параметры | Описание |
---|---|
placeholder | Идентификатор опорной заглушки, которая используется для определения места вставки фрагмента при применении фильтра. |
generator
Содержит идентификатор класса процедурной генерации результирующей выборки для коллекции. Если указан одновременно с prototype/counting-prototype/filter, последние игнорируются AF5.
Параметры | Описание |
---|---|
class-name | Идентификатор класса-генератора. Должен совпадать со значением атрибута name аннотации server-component класса, реализующего интерфейс CollectionDataGenerator. |
Статус | ГОТОВО |
---|---|
Комментарий |
Теги и атрибуты:
- Нет меток