# Урок 3. Интерактивная бизнес логика. Данный урок знакомит слушателя с принципами построения интерактивной бизнес логики. ## Отображение Группирует бизнес логику выборки Для изучения смотри: - [Руководство разработчика: Отображение](books/AppGuide/040_selection/080_выборка.md#отображения) ## Операции Обработка события, вызванного пользователем или каким-то процессом Для изучения смотри: - [Руководство разработчика: Операции](books/AppGuide/040_selection/080_выборка.md#операции) ## Атрибуты Перечень колонок, попавших в набор данных для отображения в результате операции onRefresh (а так же onRefreshExt в случае объектного запроса). Видимость, порядковый номер, отображаемое наименование, тип редактора и т.д. для атрибута настраивается в файле с разметкой (файл с расширением `.avm.xml`) ## Типы фреймов Фреймы — это средство представления информации в выборке. Полный перечень фреймов описан: - [Руководство разработчика: Основные типы фреймов](books/AppGuide/040_selection/080_выборка.md#основные-типы-фреймов) ## Средства отладки Наиболее популярными средствами отладки являются: - Клиентское окно отладчика. Для изучения смотри: [Руководство разработчика: Клиентское окно отладчика](books/AppGuide/050_tools/130_отладка_приложений.md#клиентское-окно-отладчика) - Отладка в среде IDE. Для изучения смотри: [Руководство разработчика: Отладка сервера в среде IDE](books/AppGuide/050_tools/130_отладка_приложений.md#отладка-сервера-в-среде-ide) - Отладка в базе данных. Отладка производится через обращения к БД с получением актуальных значений атрибутов. ~~~{attention} В БД хранятся только закоммиченные значения, т.е. пока пользователь не сохранил изменения, они не отобразятся в результате запроса ~~~ ## Практика ### Создание древовидного справочника - Создайте справочник `Lbr_Catalog` - Каталог с представлением объектов класса в виде дерева и указанными ниже атрибутами: |name|attribute-type|caption|Дополнительно| |-|-|-|-| | idParent | Long | Предок | Ссылается на класс Lbr_Catalog. Невидимый атрибут | | sCode | Varchar | Код | Обязательный для заполнения, мнемокод | | sCaption | Varchar | Наименование | Обязательный для заполнения, хедлайн | Чтобы генератор кода автоматически создал нужные для отображения дерева методы, необходимо в метаданных указать `viewOptions.classType="tree"` и `viewOptions.classParentAttribute="idParent"` - Добавьте в класс `Lbr_Book` хранимую ссылку на каталог. - Добавьте в `Lbr_MainMenuAvi` открытие `Lbr_CatalogAvi.defList`. ### Добавление вычисляемого поля Добавьте поле с количеством книг в каталоге. 1. Переопределите `selectStatement` и `onRefreshExt` и добавьте поле с количеством книг в каталоге, используя подзапрос. 2. Добавьте в разметку описание нового атрибута, чтобы он был видимым и выводился после описания. ### Добавление закладки Добавьте нередактируемую закладку к каталогу отображающую список книг без возможности создания и удаления. 1. В `Lbr_BookApi` объявите [транзакционный индекс](books/AppGuide/020_common/055_взаимодействие_с_базой.md#транзакционный-индекс) по полю `idCatalog` и метод получения книг по каталогу (refreshByCatalog), используя метод `refreshByKey` объявленного ранее транзакционного индекса. 1. Для `Lbr_BookAvi` добавьте новое отображение, которое будет выводить список книг для каталога, используя метод из предыдущего пункта. 1. В `avm` добавьте разметку для нового отображения. 1. Для этого отображения скройте операции `insert`, `delete` и `uniFilter`, используя аннотацию `@Oper` в `Avi` или блок `` в `avm`. Так же скройте вывод панели фильтрации. 1. Для `Lbr_Catalog` в разметке отображений `Tree` и `Card` поменяйте настройки `layout` с `simpleComposer` на `tabComposer` и добавьте блок `tabItems` с конкретным `tabItem`, который будет выводить новое отображение в качестве закладки. ### Источники для самостоятельного изучения Изучите следующие разделы в `Руководстве прикладного разработчика`: - [Выборка](books/AppGuide/040_selection/080_выборка.md) - [Взаимодействие с базой данных](books/AppGuide/020_common/055_взаимодействие_с_базой.md) - [Отладка приложений](books/AppGuide/050_tools/130_отладка_приложений.md)