В ADF есть возможность использовать полиморфизм для Entity, ViewObject, ViewRow и для построения пользовательского интерфейса с использованием ADF dynamic component.
- Условие примера. Схема HR на Oracle XE
В базовую сущность добавлены только базовые атрибуты
В унаследованных сущностях добавлены специфичные атрибуты для них атрибуты.
Для EmployeesFinance это Salary и CommissionPct
Для EmployeesShipping это PhoneNumber, HireDate, Email
В унаследованных сущностях на атрибуте DepartmentId определен дискриминатор (Polymorphic Discriminator), по нему будет фильтрация данных.
Далее от базовой сущности создано представление - EmployeesView, для него определены подтипы - EmployeesFinance, EmployeesShipping
Для базового представления созданы унаследованные - EmployeesViewFinance, EmployeesViewShipping
Не обязательный шаг. Для специфичных, дополнительных атрибутов можно назначить категорию в UI Hints, может пригодится для построения интерфейса.
Теперь надо переопределить базовую сущность в представлении на соответствующую сущность. Например для представления EmployeesViewFinance переопределить сущность Employees на EmployeesFinance
Для базового представления в модуле данных определяем экземпляры переопределенных представлений.
В базовом представлении в ViewRow классе создадим метод, для последующего переопределения в подтипах. Для переопределенных представлений переопределим этот метод, это будет полиморфизм на уровне ViewRow.
При построении страницы-формы надо выбрать режим - "Fields Generated Dynamically", ставить крыжик "Include Fied Groups" - не обязательно, это если ранее были определены категории в UI Hints.
В своем примере я пока опустил использование категорий (есть вопросы).
Вот что получилось в UI, одна форма на разные объекты.
Полиморфизм на уровне объектов Java тоже работает, нажимаем кнопку "doIt" и получаем результат свой для каждого типа объекта.
Вот такое единообразие, в разнообразии!
Источник
http://docs.oracle.com/middleware/1212/adf/ADFFD/web_form.htm#CACCCJBC
Исходник.
- Условие примера. Схема HR на Oracle XE
- Создать базовую сущность (Employees) с базовым набором атрибутов, унаследовать от нее две дополнительные (EmployeesFinance, EmployeesShipping).
- Создать представление (EmployeesView) на основе базовой сущности- Employees, унаследовать от нее два дополнительных представления (EmployeesViewFinance, EmployeesViewShipping).
- В дополнительных представлениях сделать переопределение сущности (overridden), включить дополнительные атрибуты для каждого свои
- Построить интерфейс, который будет отображать соответствующую форму для каждого представления (типа) свою с использованием полиморфизма.
Базовая сущность и две унаследованные
В базовую сущность добавлены только базовые атрибуты
Для EmployeesFinance это Salary и CommissionPct
Для EmployeesShipping это PhoneNumber, HireDate, Email
В унаследованных сущностях на атрибуте DepartmentId определен дискриминатор (Polymorphic Discriminator), по нему будет фильтрация данных.
Далее от базовой сущности создано представление - EmployeesView, для него определены подтипы - EmployeesFinance, EmployeesShipping
Для базового представления созданы унаследованные - EmployeesViewFinance, EmployeesViewShipping
Не обязательный шаг. Для специфичных, дополнительных атрибутов можно назначить категорию в UI Hints, может пригодится для построения интерфейса.
Для базового представления в модуле данных определяем экземпляры переопределенных представлений.
В базовом представлении в ViewRow классе создадим метод, для последующего переопределения в подтипах. Для переопределенных представлений переопределим этот метод, это будет полиморфизм на уровне ViewRow.
public class EmployeesViewRowImpl extends ViewRowImpl implements EmployeesViewRow {
....
public void doIt()
{
System.out.println("EmployeesViewRowImpl");
}
------------
public class EmployeesViewFinanceRowImpl
extends EmployeesViewRowImpl
{
...
@Override
public void doIt()
{
System.out.println("EmployeesViewFinanceRowImpl");
super.doIt();
}
Создадим приложение в котором с главной страницы будет запускаться форма с выбранным типом (Finance или Shipping) и строить форму ввода данных для каждого типа свою, отличающихся набором атрибутов, это будет полиморфизм для UI.При построении страницы-формы надо выбрать режим - "Fields Generated Dynamically", ставить крыжик "Include Fied Groups" - не обязательно, это если ранее были определены категории в UI Hints.
В своем примере я пока опустил использование категорий (есть вопросы).
Вот что получилось в UI, одна форма на разные объекты.
Полиморфизм на уровне объектов Java тоже работает, нажимаем кнопку "doIt" и получаем результат свой для каждого типа объекта.
Источник
http://docs.oracle.com/middleware/1212/adf/ADFFD/web_form.htm#CACCCJBC
Исходник.
Комментариев нет:
Отправить комментарий