Oracle Forms как средство разработки дополнительных приложений корпоративного хранилища данных

Oracle Forms как средство разработки дополнительных приложений корпоративного хранилища данных

Интерактивное средство разработки Oracle Forms довольно давно представлен в продуктовой линейки Oracle (впервые он был задуман в конце 80х годов). Oracle Forms версии 4.5, 5, 6 и 6i был средством исключительно для разработки клиент-серверных приложений, но начиная с версии 9i, он предназначен только для разработки web приложений. Данные web-приложения представляют из себя Java апплет запускаемый в браузере, который обращается к Forms Server на котором и выполняется вся логика приложения.

Oracle Forms, как и Oracle Apex, является решением для быстрого создания приложений под web.

Цель данной статьи – привести пример создания формы ввода данных для таблицы соответствия валют. Таблицы соответствия часто применяются при загрузке данных в корпоративное хранилище данных (КХД) для обеспечения согласованность данных. Например, когда необходимо однозначное определение соответствия значений существующего в КХД аналитического измерения и значений справочника, извлекаемого из системы-источника данных. Данная статья направлена на специалистов, ранее не знакомых с Oracle Forms.

Создание таблицы соответствия в базе данных

Примем следующий состав полей таблицы соответствия валют измерения КХД и справочника системы источника данных:

Наименование столбца таблицыТип данныхКомментарий
CUR_KHDVARCHAR2(3)Код валюты, определенный в КХД
CUR_SRCVARCHAR2(10)Код валют, определенный в системе источнике данных
EFCT_DTDATEДата, с которой действует запись, определяющая соответствие двух кодов валют
END_DTDATEДата, до которой действует запись, определяющая соответствие двух кодов валют. Для активных записей принимает значение 01.01.2999
IS_ACT_INDNUMBER(1) default 1Признак действующей записи. 1 – запись действует. 0 – запись не действует
PPN_DTDATEДата добавления записи
UPD_DTDATEДата изменения записи
USR_LGNVARCHAR2(50)Логин пользователя добавившего/изменившего запись

Ниже представлен SQL скрипт создания таблицы в базе данных Oracle и наполнения её несколькими записями. Для создания таблицы скрипт следует запустить в SQLPlus.


conn scott/tiger@dw;

create table MP_CURRENCY
(
  CUR_KHD      VARCHAR2(3) not null,
  CUR_SRC      VARCHAR2(10) not null,
  EFCT_DT      DATE not null,
  END_DT       DATE not null,
  IS_ACT_IND   NUMBER(1) default 1 not null,
  UPD_DT       DATE,
  PPN_DT       DATE,
  SRC_USR_LGN  VARCHAR2(50)
)
tablespace USERS;

alter table MP_CURRENCY
  add constraint MP_CURRENCY_U1 unique (CUR_KHD, CUR_SRC, IS_ACT_IND);

comment on table MP_CURRENCY 
  is 'ТАБЛИЦА СООТВЕТСТВИЯ ВАЛЮТ';
comment on column MP_CURRENCY.CUR_KHD 
  is 'Код валюты, определенный в КХД';
comment on column MP_CURRENCY.CUR_SRC 
  is 'Код валют определенный в системе источнике данных';
comment on column MP_CURRENCY.EFCT_DT 
  is 'Дата, с которой действует запись определяющая соответствие двух кодов валют';
comment on column MP_CURRENCY.END_DT 
  is 'Дата, до которой действует запись определяющая соответствие двух кодов валют';
comment on column MP_CURRENCY.IS_ACT_IND 
  is 'Признак действующей записи. 1 – запись действует. 0 – запись не действует';
comment on column MP_CURRENCY.UPD_DT 
  is 'Дата добавления записи';
comment on column MP_CURRENCY.PPN_DT 
  is 'Дата изменения записи';
comment on column MP_CURRENCY.SRC_USR_LGN 
  is 'Логин пользователя добавившего/изменившего запись';

insert into MP_CURRENCY 
  (CUR_KHD, CUR_SRC, EFCT_DT, END_DT, 
   IS_ACT_IND, UPD_DT, PPN_DT, SRC_USR_LGN)
values 
  ('USD', 'Евро', to_date('20-11-2010', 'dd-mm-yyyy'), 
    to_date('01-01-2999', 'dd-mm-yyyy'), 
   1, null, to_date('20-11-2010', 'dd-mm-yyyy'), 'SCOTT');

insert into MP_CURRENCY 
  (CUR_KHD, CUR_SRC, EFCT_DT, END_DT, 
   IS_ACT_IND, UPD_DT, PPN_DT, SRC_USR_LGN)
values 
  ('EUR', 'Доллар', to_date('20-11-2010', 'dd-mm-yyyy'), 
    to_date('01-01-2999', 'dd-mm-yyyy'), 
   1, null, to_date('20-11-2010', 'dd-mm-yyyy'), 'SCOTT');

commit;

Установка Oracle Forms

  1. Необходимо скачать Oracle Forms с официального сайта Oracle. В версии 10g он входит в состав Oracle Developer Suite, в версии 11g в состав - Oracle Fusion Middleware. Далее все примеры приведены для версии 10g.
  2. Распаковать архив(ы).
  3. Запустить установку (setup.exe)
  4. В ходе установки определить Oracle Home (можно оставить предлагаемый по умолчанию).
  5. На закладке выбора типа установки выбрать Complete.
  6. Далее следовать указанию мастера установки.
  7. После необходимо прописать нужную БД в файл tnsnames.ora (ORACLE_HOME\NETWORK\ADMIN\).

В результате установки у Вас на компьютере появится web-сервер и среда разработки Oracle Forms.

Создание приложения ввода данных в таблицу соответствия

Ниже приведен перечень шагов, необходимых для выполнения при создании формы ввода значений таблицы соответствия MP_CURRENCY.

1. Запустить локальный web-сервер OC4J.

2. Открыть приложение Oracle Forms Builder. Показать пример.

3. Подключиться к БД. Нажать Ctrl+J. Ввести логин, пароль и имя БД.

4. Сохранить форму. Имя присвоить MP_CURRENCY_v1. Показать пример.

5. Создать канву: установить курсор на элемент Canvases и нажать кнопку.

6. Присвоить (как переименовывание файлов в проводнике Windows) имя MP_CURRENCY окну, канве, форме.

7. Вызвать панель свойств окна (правой кнопкой мышки щелкнуть на наименовании окна (MP_CURRENCY), в появившемся меню выбрать "Property Palette". В свойстве окна Title указать название формы на русском языке - "ТАБЛИЦА СООТВЕТСТВИЯ ВАЛЮТ". В свойстве Width - 400, в свойстве Height - 250. Показать пример.

8. В свойстве Background Color канвы (Canvas) установить значение gray20. Показать пример.

9. Создать визуальный атрибут с именем VSL_ATR_YELLOW и назначить свойство цвета фона «yellow». Показать пример.

10. Вызвать мастер добавления блока данных. Нажать правой кнопкой мышки на элемент Data Block в окне Object Navigator, в появившемся меню выбрать Data Block Wizard. Показать пример.

11. Используя мастер добавление блоков данных, выбираем создание блока данных на основе таблицы или представления (Table or View). Далее в выбираем таблицу MP_CURRENCY, добавляем все её поля в блок данных и нажимаем кнопку "Готово". Показать пример.

12. Отредактировать следующие свойства блока данных MP_CURRENCY (панель свойств вызывается по нажатию кнопки F4):

Number of Records Displayed – указать количество строк, которое будет отображаться на форме (в нашем примере укажем 10).
Show Scroll Bar – указать Yes.
Scroll Bar Canvas - указать канву, на которой будет располагаться Scroll Bar (в нашем примере это MP_CURRENCY).

13. Для элементов блока данных, которые будут отображаться на форме и не подлежать редактированию пользователями (в нашем примере это UPD_DT, PPN_DT, SRC_USR_LGN), установить следующие значения:

Enable установить No;
Number of Items Displayed установить 1;
Canvas установить MP_CURRENCY;
Background Color установить white;
Bevel установить Plain;
Font Name установить Arial;
Font Size установить 10;
Prompt Font Name установить Arial;
Prompt Font Size установить 8;
Width установить в 54 для UPD_DT, PPN_DT и в 100 для SRC_USR_LGN.

14. Для всех элементов блока данных, которые будут отображаться на форме и в которых предметный эксперт будет вводить соответствия (в нашем примере это CUR_KHD и CUR_SRC), установить следующие значения для свойств:

Current Record Visual Attribute Group установить VSL_ATR_YELLOW;
Canvas установить MP_CURRENCY;
Background Color установить white;
Bevel установить Plain;
Font Name установить Arial;
Font Size установить 10;
Prompt Font Name установить Arial;
Prompt Font Size установить 8.

15. Для всех элементов блока данных, которые будут отображаться на форме и в которые предметный эксперт будет вводить данные о датах активации записи срока ее действия (в нашем примере это EFCT_DT и END_DT) установить следующие значения для свойств:

Current Record Visual Attribute Group установить VSL_ATR_YELLOW;
Canvas установить MP_CURRENCY;
Required установить в No;
Background Color установить white;
Bevel установить Plain;
Font Name установить Arial;
Font Size установить 10;
Prompt Font Name установить Arial;
Width установить 54;
Prompt Font Size установить 8.

16. Для элемента IS_ACT_IND (данный элемент устанавливает признак активной или не активной записи) установить следующие значения для свойств:

Item Type установить Check Box;
Value when Checked установить 1;
Value when Unchecked установить 0;
Initial Value установить 1;
Width установить 12;
Canvas установить MP_CURRENCY.

17. Для всех элементов типа дата (в нашем примере это EFCT_DT, END_DT, UPD_DT, PPN_DT) установить для свойства Format Mask следующее значение «DD.MM.YYYY».

18. Открыть канву (двойной клик левой кнопкой мышки) и разместить элементы на нем (путем перетягивания мышкой) так, как пользователю будет удобно работать с формой.

19. Подобрать размеры канвы и размеры окна (путем перетягивания их области мышкой).

20. Дать названия полям на русском языке (двойной клин на названии или свойство Prompt элемента). Показать пример.

21. Добавить триггер WHEN-NEW-FORM-INSTANCE (содержимое триггера будет выполняться при запуске формы): установить курсор на элемент Triggers, нажать правую кнопку мышки, в появившемся окне меню выбрать нужный триггер. В теле триггера написать следующий код:


execute_query;

Показать пример.

22. Добавить триггер PRE-INSERT (содержимое триггера будет выполняться перед вставкой строк(и) в таблицу БД) на блок данных: установить курсор на элемент Triggers, нажать правую кнопку мышки, в появившемся окне меню выбрать нужный триггер. В теле триггера написать следующий код:


:EFCT_DT:=SYSDATE;
:END_DT:=to_date('01.01.2999', 'DD.MM.YYYY');
:PPN_DT:=SYSDATE;
:SRC_USR_LGN:=get_application_property(USERNAME);

Показать пример.

23. Добавить триггер PRE-UPDATE (содержимое триггера будет выполняться перед применением изменений в таблице БД) на блок данных: установить курсор на элемент Triggers, нажать правую кнопку мышки, в появившемся окне меню выбрать нужный триггер. В теле триггера написать следующий код:


IF :System.Record_Status = 'CHANGE' THEN
 :UPD_DT:=SYSDATE;
 :SRC_USR_LGN:=get_application_property(USERNAME);
END IF;

Показать пример.

24. Добавить триггер WHEN-CHECKBOX-CHANGED (содержимое триггера будет выполняться при нажатии/отжатии "галочки") на элемент IS_ACT_IND: установить курсор на элемент Triggers, нажать правую кнопку мышки, в появившемся окне меню выбрать нужный триггер. В теле триггера написать следующий код:


IF :IS_ACT_IND = 1 THEN
 :END_DT := to_date('01.01.2999', 'DD.MM.YYYY');
ELSE 
 :END_DT := SYSDATE;
END IF;

Показать пример.

25. Откомпилировать форму, используя комбинацию клавиш Ctrl+T. Если ошибок нет, то никакого сообщения не появится, иначе появляется окно с указанием на ошибку. В случае возникновения ошибок необходимо их устранить и повторить попытку компиляции формы.

26. Сохранить форму: нажать комбинацию клавиш Ctrl+S.

27. Запустить форму для тестирования: нажать комбинацию клавиш Ctrl+R. Если Вы запускаете форму первый раз, то Вам будет предложено установить Oracle Java Initiator. Показать пример.

28. Используя кнопки панели управления, провести тестирование работоспособности формы на возможность ввода данных, изменения и удаления данных.

Скачать пример реализации в Oracle Forms формы данных.