Урок 6. Практика разработки. Часть 3
Contents
Урок 6. Практика разработки. Часть 3#
В данном уроке мы рассмотрим:
Диалог с пользователем
Мультиселект (множественный выбор)
Группировка объектов
Объектные характеристики
Диалог с пользователем#
Диалоги позволяют задавать вопросы пользователю и получать от него ответы на эти вопросы.
Мультиселект#
Мультиселект - возможность выбрать несколько строк в списках или деревьях.
Руководство разработчика: Выборки # Мультиселект
Руководство разработчика: Выборки # Диалоги # Форма в режиме выбора значения
Группировка объектов#
Группировка используется для систематизации хранения объектов и удобства восприятия пользователем, так же группировка позволяет массово управлять характеристиками и настройками объектов класса.
Руководство разработчика: Сервисные возможности для классов # Группировка
Объектные характеристики#
Характеристика – это качественное или количественное свойство объекта. Характеристиками в системе являются специальные атрибуты, которые содержат дополнительную пользовательскую информацию.
Руководство разработчика: Сервисные возможности для классов # Объектные характеристики
Практические задания#
Диалог с пользователем#
В классе
Lbr_Publisher
добавьте диалог, в котором у пользователя запрашивается подтверждение на удаление объекта.Для заказов
Lbr_InOrder
иLbr_OutOrder
на закладках с детализацией реализуйте следующую логику для операции «Создать»:
при нажатии на иконку операции открывается список книг в режиме выбора
если пользователь выбрал книгу и подтвердил выбор, то создается новая запись в детализации заказа.
Мультиселект#
Для заказов на закладке «Состав» измените работу операции «Создать» на мультиселект:
В
Api
классовLbr_OutOrderDet
иLbr_InOrderDet
реализуйте метод регистрации записи. Метод принимаетid
заказа иid
книги, осуществляет поиск записи в с такими идентификаторами заказа и книги в классе, если запись есть, то возвращает ееid
, если записи нет, то создает ее и возвращает ееid
.В операции создания открывать форму выбора книг в режиме мультиселекта, для каждой выбранной книги вызывать метод регистрации, таким образом книги в позициях заказа не будут дублироваться, если пользователь выбрал книгу, уже подобранную в заказ.
В списке книг (
Lbr_Book#List
) реализовать операцию подбора книг в заказы:создать на тулбаре новую операцию
при нажатии на операцию создается диалог с произвольными кнопками, текст диалога
В какой тип заказа добавить выбранные книги?
, список кнопок:Возврат
Выдача
Отмена
Если пользователь нажал «Отмена», то выполнение операции завершается без дальнейших действий.
Если пользователь выбрал «Возврат» или «Выдача», то открывается список заказов в режиме выбора с
мультиселектом
(Возврат - списокLbr_InOrder
, Выдача - списокLbr_OutOrder
).Для каждого выбранного заказа выполняется следующая логика:
обходим все выделенные книги и регистрируем их для заказа методом регистрации созданном в пункте 1.
Группировка объектов#
Включите группировку для класса
Lbr_Publisher
в
odm
укажите тип группировки «Множественная»переформируйте исходный код и таблицы
соберите проект.
Настройте дерево групп:
Под корневой группой создайте 2 подгруппы:
Зарубежные издательства
Отечественные издательства
Выведите закладку с группами объекта в карточке (отображение
Card
).Активируйте в выборке
Lbr_Publisher#List
операциюДополнительно
(имя методаextraOperations
).Под операцией
Дополнительно
создайте новую операциюСтатистика текущей группы
, выводящую статистику по группе, о количестве объектов в группе и количестве подгрупп.Создайте новую операцию на тулбаре, укажите ей операцию-предка
Для определения текущей группы используйте
getVar("idGroup#")
Используя диалоги, вывести на экран информацию вида:
Количество объектов в группе: 42 Количество объектов без учета подгрупп: 1 Количество подгрупп: 10
Запросить количество объектов в группе можно через таблицу
Btk_FlatObjectGroup
Запросить количество объектов в группе без учета подгрупп можно через таблицу
Btk_ObjectGroup
Запросить количество подгрупп можно через таблицу
Btk_GroupTree
по полюidParent
и исключить запись, в которойidParent
равняетсяidChild
Под операцией
Дополнительно
реализуйте операциюЗарегистрировать объект в корневой группе
, которая добавляет объект в корневую группу, для этого:Создайте новую операцию на тулбаре, укажите ей операцию-предка
Операция получает
rop
текущего объектаРегистрирует объект в корневой группе методом
Btk_ObjectGroupApi#register
параметр
bpMultiGroup
передавать в значении1
, т.к. на классе включена множественная группировка.параметр
bpMainGroup
передавать в значении1
, так для объекта эта группа станет «Основной»для получение
id
корневой группы используйте кодBtk_ClassApi().load(Lbr_PublisherApi().idClass).get(_.idGroupRoot)
Объектные характеристики#
Добавьте в
odm
классаLbr_Publisher
логический атрибутbIsForeign
-Зарубежное издательство
, укажите ему свойство, что он является объектной характеристикой.Настройке карточку объектных характеристик для класса
Lbr_Publisher
, зависящую от групп объекта.укажите нужный тип карточки в
odm.xml
objectAttrCardType="group"
выведите закладку в карточке объекта (используйте выборку
Btk_ObjectGroupAvi#List_Tab
).
Добавьте объектные характеристики, хранящиеся в json-контейнере, в карточке класса.
зайдите в карточку класса
Lbr_Publisher
и откройте закладкуАтрибуты
выполните операцию создать
заполните поля для нового атрибута:
системное имя = dSanctionBegin
наименование = Дата начала санкций
тип данных = Date
Тип атрибута = Basic
сохраните результат.
создайте второй атрибут:
системное имя = idJsonAuthor
наименование = Любимый автор издательства
тип данных = Long
Тип атрибута = RefObject
Ссылается на класс = выберите
Lbr_Author
Настройте вывод объектных характеристик на группах объекта.
Откройте интерфейс редактирования групп и закладку
Атрибуты группы
и включите редактирование в спискеДля корневой группы добавьте атрибут
bIsForeign
Для группы «Зарубежные издательства»
добавьте атрибут
dSanctionBegin
переопределите атрибут
bIsForeign
, установите значение по умолчанию1
. В предложенном диалоге согласитесь установить значение по умолчанию для всех объектов с перезаписью имеющихся значений.
Для группы «Отечественные издательства»
добавьте атрибут
idJsonAuthor
переопределите атрибут
bIsForeign
, установите значение по умолчанию0
. В предложенном диалоге согласитесь установить значение по умолчанию для всех объектов с перезаписью имеющихся значений.
После настройки на карточке об. характеристик будут доступны атрибуты:
bIsForeign
- для всех объектов, при включении в группу «Зарубежные издательства» будет устанавливаться значение1
, при включении в «Отечественные издательства» будет устанавливаться значение0
dSanctionBegin
- для объектов группы «Зарубежные издательства», снимите признакИспользовать для основных групп
idJsonAuthor
- для объектов группы «Отечественные издательства», снимите признакИспользовать для основных групп
Под операцией
Дополнительно
сделайте операциюОбновить характеристики
, которая будет обновлять значения характеристик объекта.Создайте новую операцию на тулбаре, укажите ей операцию-предка
Проверяем какое это издательство, получая значение характеристики
bIsForeign
Если зарубежное:
проверяем текущее значение характеристики
dSanctionBegin
, если оно заполнено, то выдаем сообщениеДля издательства <Наименование> уже введены санкции, начало санкций: <значение характеристики dSanctionBegin>
если текущее значение
dSanctionBegin
не заполнено, то заполняем текущей датой, и выдаем сообщениеДля издательства <Наименование> успешно введены санкции
Если отечественное:
проверяем текущее значение характеристики
idJsonAuthor
, если оно заполнено, то выдаем сообщениеДля издательства <Наименование> уже выбран любимый автор: <headline для значение характеристики idJsonAuthor>
если текущее значение
idJsonAuthor
не заполнено, то открываем диалог выбора автора, и устанавливаем выбранное значение в характеристику
Примечание
Для получения значения характеристики, хранящейся в таблице класса используется стандартный способ, как и для других атрибутов класса.
Для получения значения json-характеристики используется метод
ru.bitec.app.btk.class_.attr.AttrApi#getAttrValue
. Пример вызова:val dDate = Lbr_PublisherApi().getAttrValue(rop, "dSanctionBegin").asNDate
Для установки значения json-характеристики используется метод
ru.bitec.app.btk.class_.attr.AttrApi#setAttrValue
. Пример вызова:Lbr_PublisherApi().setAttrValue(rop, "dSanctionBegin", NDate.now())