Skip to content

Latest commit

 

History

History
70 lines (45 loc) · 4.88 KB

qs_customer_edit_with_orders.adoc

File metadata and controls

70 lines (45 loc) · 4.88 KB

Экран редактирования Покупателя со списком Заказов

Займемся задачей отображения списка заказов в окне редактирования покупателя.

Перейдите в секцию Generic UI. Откройте на редактирование экран customer-edit.xml.

Перейдите на вкладку Designer.

В группе Data components в палитре компонентов найдите Collection и перетащите его в секцию data в иерархии компонентов экрана.

Для контейнера выберите сущность com.company.sales.entity.Order и её представление _local. Сгенерируйте loader ID с помощью кнопки generate id.

Добавьте параметр WHERE в сгенерированный запрос JPQL, чтобы загружать только те заказы, которые имеют ссылку на нужного нам покупателя:

select e from sales_Order e where e.customer = :customer

В итоге у вас должен получиться следующий data container для загрузки экземпляров сущности Order:

link:../../../../source/qs/ordersCt.xml[role=include]

Далее, в палитре компонентов найдите компонент Label. Перетащите этот компонент на панель иерархии компонентов экрана между элементами form и editActions. Перейдите на вкладку Properties на панели свойств. В поле value введите значение компонента: Orders.

Tip

Если разрабатываемое приложение предполагает локализацию на несколько языков, используйте кнопку localization рядом с полем value, чтобы создать новое сообщение msg://orders и задать его значение на требуемых языках.

Перетащите компонент Table из палитры компонентов на панель иерархии компонентов между label и editActions. Выделите компонент в иерархии и перейдите на вкладку Properties. Задайте размеры таблицы: в поле width укажите 300px, в поле height установите значение 200px. Из списка доступных источников данных выберите контейнер ordersDc, после этого в поле id с помощью кнопки generate id сгенерируйте идентификатор таблицы: ordersTable.

В контекстном меню таблицы выберите Wrap Into > Group Box. Перейдите на вкладку Properties контейнера groupBox на панели свойств и введите Orders в поле caption, в поле width укажите 320px.

customer edit

В итоге дескриптор экрана customer-edit.xml на вкладке Text будет выглядеть следующим образом:

link:../../../../source/qs/customer-edit.xml[role=include]

Откройте контроллер экрана CustomerEdit. Кнопки © и <> на панели с номерами строк помогут вам быстро переключаться между дескриптором и контроллером экрана.

Для начала давайте отключим автоматическую загрузку данных. Для этого удалите аннотацию @LoadDataBeforeShow из исходного кода.

Инжектируйте loader для заказов в класс контроллера:

@Inject
private CollectionLoader<Order> ordersDl;

Затем подпишитесь на событие BeforeShowEvent, чтобы указать значение параметра customer в запросе ordersDl. Это можно сделать, нажав Alt+Insert и выбрав Subscribe to Event в появившемся меню Generate.

link:../../../../source/qs/CustomerEdit.java[role=include]

Этот метод будет загружать связанные экземпляры сущности Order.