суббота, 21 сентября 2013 г.

18й - практикум. Oracle ADF. JDeveloper 12c - Polymorphic for dynamic interface

В ADF есть возможность использовать полиморфизм для Entity, ViewObject, ViewRow и для построения пользовательского интерфейса с использованием ADF dynamic component.



- Условие примера. Схема 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, может пригодится для построения интерфейса.


Теперь надо переопределить базовую сущность в представлении на соответствующую сущность. Например для представления EmployeesViewFinance переопределить сущность Employees на EmployeesFinance

Для базового представления в модуле данных определяем экземпляры переопределенных представлений.

В базовом представлении в 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

Исходник.




   



Комментариев нет:

Отправить комментарий