Урок 7. Практика разработки. Часть 4
Contents
Урок 7. Практика разработки. Часть 4#
Цель данного урока познакомить слушателя с различными возможностями классов и выборок
Сервис универсальных коллекций (v-collection)#
Универсальные коллекции - это коллекции, для которых в качестве мастера могут выступать объекты разных классов.
Для изучения смотри:
Денормализация классов-деревьев#
В нашем случае под денормализацией понимается вспомогательный класс, который обеспечивает более быстрый доступ к данным по иерархичным связям, чем рекурсивные запросы.
Для изучения смотри:
Режимы редактирования выборки#
Для отображения имеется 3 варианта редактируемости, которые указываются в свойстве отображения editMode
в разметке (файле avm
):
edit
- Разрешено редактирование данных. Можно запретить редактированиеnotEdit
- Запрещено редактирование данных. Можно разрешить редактированиеreadOnly
- Запрещено редактирование данных.
Для редактируемых списков доступна операция allowEdit, которая меняет режим редактирования.
Передача параметров в выборку#
Передача параметров в выборку - способ передачи данных между выборками, которые не зависят друг от друга. По умолчанию такая передача используется при открытии карточки, в которую передаются id объекта и режим редактирования.
В передаче дополнительных параметров при создании объекта в карточке используется метод insert_Params()
, который можно переопределить для расширения списка параметров без переопределения всего метода создания.
Для изучения смотри:
Клонируемые операции#
Операции, которые размножаются по результату запроса. Запрос для размножения операции может быть указан в аннотации @Oper
в свойстве cloneQuery
или в разметке в блоке oper
в свойстве cloneQuery
Результат запроса должен содержать поля:
sName - системное имя операции
nImageIndex - номер изображения для операции
sCaption - отображаемое имя операции
Получение значений атрибутов запроса происходит как обычное получение атрибутов через getVar
. Для получения значений атрибутов выборки, откуда была вызвана операция, необходимо добавить super$
к имени атрибута
Фильтры#
Фильтрация набора данных производится с помощью макроса фильтра, генерируемого на основе условий с признаком isExpression="true"
или непосредственного добавления условия в запрос получения данных. Имя макроса берется из разметки фильтра и подставляется с префиксом &
. Например, для <macros name="DefFltReferenceMacro">
в запрос необходимо подставить &DefFltReferenceMacro
, в котором будет сгенерирован макрос фильтра.
По умолчанию для справочников и классов с группировкой в Dvi
генерируется подстановка макроса фильтра в запрос с помощью prepareSelectStatement
Разметка для фильтров аналогична разметке атрибутов. Атрибуты фильтров выводятся на панели фильтрации и имеют свои собственные сеттеры. По умолчанию для справочников генерируется фильтр «Отображать неиспользуемые». В свойствах фрейма можно отключить отображение панели фильтрации с помощью свойства frame
«filter.isVisible
» (по умолчанию отображение отключено для карточки).
Пример условия для частичного совпадения по тексту
expression="upper(t.sCode) like upper('%'||:flt_sCode||'%')"
Практика#
Создание универсальной коллекции#
Создайте v-collection
Lbr_Link
- «Связанные документы» с указанными ниже атрибутамиname
attribute-type
caption
Дополнительно
gidDoc
Varchar
Документ
Ссылается на класс Lbr_Document. Невидимый атрибут, ссылочный на мастера
gidLink
Varchar
Связанный документ
Ссылается на класс Lbr_Document
Подключите универсальную коллекцию к классам:
Lbr_InAct
- Приходная накладнаяLbr_InOrder
- Возврат книгLbr_OutOrder
- Выдача книг
Выведите отображение связанных документов в закладки документов, настроенные на тип объекта.
В
Lbr_linkApi
реализуйте метод регистрации записи.
Метод принимаетgid
документа иgid
документа для связывания, осуществляет поиск записи с такими идентификаторами в классе, если запись есть, то возвращает ее, если записи нет, то создает и возвращает ее.В отображении связанных документов в операции создания открывать форму выбора из списка документов
Lbr_Document
в режиме мультиселекта, для каждой выбранной записи вызывать метод регистрации, таким образом связанные документы не будут дублироваться, если пользователь выбрал документ, уже подобранный в связях.
Создание денормализации#
Создайте журнал
Lbr_CatalogTree
- «Денормализованное дерево каталога»Подключите
Lbr_CatalogTree
в качестве денормализации дляLbr_Catalog
Заполните денормализацию для существующей структуры каталогов, используя метод
updateDenormFull
изTreeDenormApi
Для поддержания в актуальном состоянии структуры денормализованного дерева вызовите в серверных процедурах создания
(api#insert)
, удаления(api#delete)
и установки предка(api#setidPatent)
классаLbr_CatalogTree
процедурыupdateDenormAfterFlush(idpObject: NLong)
иdeleteDenormAfterFlush(idpObject: NLong)
из апи денормализованного дерева.Добавьте в
Lbr_CatalogAvi
нехранимый атрибут, который с помощью денормализации будет отображать количество книг в каталоге и всех, входящих в него.
Режимы редактирования выборки#
Для закладки книг из Урока 3 выведите операцию редактирования в списке
allowEdit
Передача параметров в выборку#
Для закладки книг из Урока 3 выведите операции:
Удалить.
Создать.
При создании записи в нее сразу должен подставиться каталог, для которого отображается перечень книг. Подстановка должна работать как при создании в списке для редактируемого списка, так и при создании в карточке для нередактируемого списка
Добавление фильтров#
Добавьте в
Lbr_BookAvi#List
фильтры:ISBN
Наименование
Издатель - фильтр по трем точкам. Выбор издателя из умолчательного списка
Для добавления фильтров необходимо:
В разметке в блоке
filter
объявить или дописать условия вmacros
. Для ссылочного фильтра необходимо так же объявить HL атрибут для вывода пользователю.Для HL атрибута ссылочного фильтра в
Avi
объявите сеттер, используя вызов методаLbr_PublisherAvi.processIdHLEvent()
с простановкой результата в ссылочный атрибут фильтра.Добавьте макрос фильтра к запросу данных, используя
prepareSelectStatement
, если его там нет.