Инфраструктурные возможности фреймворка#
Возможности классов расширяются сервисным окружением, которое постоянно совершенствуется.
Служебные атрибуты#
Для сервисных возможностей фреймворк добавляет в таблицы служебные атрибуты. Служебные атрибуты заканчиваются постфиксом _dz.
Пример:
nVersion_dz;screateuser_dz;dcreatedate_dz.
Внимание
Разработчикам запрещено создавать и изменять такие атрибуты.
Отображение состояния сессии в форме#
Состояние сессии можно определить по цвету системных операций Сохранить и Откатить на тулбаре формы.
Все состояния формы перечислены в таблице:
Пользовательская блокировка |
Данные для отправки в базу данных |
Кнопка «Сохранить» |
Кнопка «Откатить» |
|---|---|---|---|
Нет |
Нет |
не активна |
не активна |
Нет |
Есть |
активна |
активна (крест) |
Есть |
Нет |
не активна |
активна (круг) |
Есть |
Есть |
активна |
активна (крест) |
Настройки приложения#
Настройки приложения позволяют задавать глобальные константы. Для получения значения настройки используйте функцию:
Btk_AppPropertiesTypeApi.GetbValue(
sType //- Системное имя настройки
idObjectType //Тип объекта
) //возвращает true или false
Btk_AppPropertiesType
Таблица настройки приложения, содержит поля:
sSysName— Системное имя;sCaption— Наименование;sDescription— Описание;idModule— Модуль.
Btk_AppProperties
Таблица значений настроек приложения, содержит поля:
idType— Настройка;idObjectType— Тип объекта;bValue— Значение boolean;nValue— Значение number;sValue— Значение string;dValue— Значение date.
Поиск по шаблону#
Поиск по шаблону — серверная возможность поиска объектов класса по частичному или полному совпадению введенного текста со значениями полей объекта или его заголовка и мнемокода. Поиск регистронезависимый.
Алгоритм работы поиска#
Определяются поля, по которым требуется осуществлять поиск, и их приоритет.
Выполняются последовательно запросы, пока не получен результат в виде одной записи:
По всем полям в порядке приоритета ищутся значения по полному совпадению введенного текста (
=).По всем полям в порядке приоритета ищутся значения по частичному совпадению введенного текста (
like).
Возвращается результат: первым считается первый запрос, вернувший одну запись, либо первый запрос, вернувший данные.
По умолчанию для класса включен поиск по шаблону и осуществляется по служебным полям sheadline_dz и smnemocode_dz. Сначала — по заголовку, затем — по мнемокоду.
Настройка поиска для класса#
В odm-файле для класса добавьте тег patternSearch:
<class>
<patternSearch isActive="true"
headLineOrder="100"
mnemoCodeOrder="200"
searchType="startsWith"
indexHlMc="true"/>
</class>
Описание настроек:
isActive— Активность поиска по шаблону на классе. Если выключено, функция поиска по шаблону будет возвращать 0 записей. Умолчательное значение —true.headLineOrder— Порядок поиска по служебному полюsheadline_dz. Умолчательное значение —1. Чем меньше значение, тем выше приоритет поиска по этому полю. Поля с наименьшими значениями порядкового номера обрабатываются в первую очередь.mnemoCodeOrder— Порядок поиска по служебному полюsmnemocode_dz. Умолчательное значение —2. Логика обработки аналогичнаheadLineOrder.searchType— Тип поиска:По началу слова (по умолчанию) —
likeс правым%.По вхождению —
likeс правым и левым%.
indexHlMc— Индексировать поляsheadline_dzиsmnemocode_dz. При включенном свойстве будут созданы индексы по этим полям в верхнем регистре.
Настройка поиска по атрибутам#
Откройте odm-файл.
Добавьте тег
patternSearchдля нужного атрибута. Если тег добавлен, атрибут участвует в поиске по шаблону.
Пример:
<attr name="sText"
attribute-type="Text"
type="basic"
order="130"
caption="Text">
<patternSearch order="10"
searchType="contains"/>
</attr>
Описание настроек:
order— Порядковый номер поиска по полю этого атрибута. Нумерация сквозная по классу: можно настроить, чтобы атрибут обрабатывался раньше заголовка и мнемокода.searchType— Тип поиска:По началу слова (по умолчанию) —
likeс правым%.По вхождению —
likeс правым и левым%.
Перекрытие метода поиска#
Метод реализован в одном из рутовых API:
ru.bitec.app.gtk.eclipse.rdb.SEntityBaseApiImpl#findByPattern
В наследниках его можно перекрыть и написать свою логику поиска по шаблону.
Полнотекстовый поиск#
Сервисная возможность класса осуществлять быстрый поиск по значению атрибутов класса.
Данные классов хранятся в индексе полнотекстового поиска в схеме fts:
Btk_FtsReg— индекс объектов классов;Btk_FtsWords— индекс используемых слов.
Форма поиска доступна в главном меню приложений, в меню «Сервис».
Настройка#
Для включения полнотекстового поиска в Odm установите свойство класса fts.Enabled в значение true.
По умолчанию в полнотекстовом поиске участвуют все строковые значимые/автонумерующиеся/вычисляемые, а также ссылочные на объект и атрибуты переменной ссылочности с указанным ссылочным классом.
Для переопределения поиска по атрибуту используется свойство fts.Enabled.
Обновление индекса#
После обновления кода на проекте и вызова ssh-команды init Data происходит анализ классов. Если настройки класса изменились (класс стал индексируемым или добавились новые индексируемые атрибуты, которые до этого не индексировались; новые атрибуты не учитываются), происходит планирование обновления индекса для всех объектов класса.
При изменении объектов классов и сохранении в БД (session.flush()), которые индексируются, или на которые ссылаются объекты индексируемых классов, эти объекты добавляются в лог измененных объектов индекса.
Значения ссылочных полей хранятся в строковом виде и определяются как значение поля sHeadLine_dz ссылочного объекта.
В системе зарегистрировано задание «Синхронизация полнотекстового индекса», которое обновляет индекс. Это задание анализирует таблицу измененных объектов и таблицу измененных классов, сохраняет эти данные в общую очередь на индексацию, вычисляет и обновляет данные индекса.
Команды строки поиска#
Формат описания:
Введенная строка— Логика обработки.
Команды:
Цепь— Найдёт текст, в котором присутствует слово «цепь», «цепи», «цепью» и т. д.цепь звено— Найдёт текст, в котором присутствуют оба слова и их склонения.Цепь И звено— То же самое, что ицепь звено. Пробел считается оператором «И».Цепь & звено— То же самое, что ицепь звено.Цепь ИЛИ звено— Найдёт текст, в котором присутствует одно из слов или оба, с учётом склонений.Цепь | звено— То же самое, что ицепь ИЛИ звено.Цепь И (Звено ИЛИ Кольцо)— Найдёт текст, в котором есть слово «цепь» и одно из слов «звено» или «кольцо».Цепь#40— Найдёт текст, в котором есть похожие на «цепь» слова, например, «цеп.». Число после#показывает точность поиска — от 1 до 100, где 100 — полное совпадение.#Цепь— То же самое, что иЦепь#40.Цеп*— Найдёт текст, слова в котором начинаются на «цеп», например, «цепь», «цепная» и т. д.