Создание новой формы в Oracle Apps
В этой статье вы выучите шаги, необходимые для создания custom формы в Oracle Apps практически с нуля.
Вопрос: Зачем докучать обучением этого, если Oracle Fusion в будущем заменит Oracle Forms на среду OA Framework?
Ответ: Ну во-первых, я еще не слышал официальное заявление Oracle на этот счет, но я согласен, что скорее всего на смену OracleForms придет Fusion. Однако, более важно, что Oracle будет поддерживать текущий технический стэк бесконечное время, т.е. Release 12 будет поддерживаться в обозримом будущем, согласно лицензии Apps Unlimited. Следовательно, множество клиентов будут продолжать использовать эту технологию десятилетиями. Хотя я не хочу заморачивать голову моему ребенку изучением Oracle Forms :-).
Вопрос: ОК, какие шаги нужны, чтобы создать новую форму с нуля?
Ответ: Ниже вкратце описаны эти шаги.
- Скопируйте файл TEMPLATE.fmb из папки $APPL_TOP\au\11.5.0\forms\RU и сохраните у себя в какой-нибудь папке.
- Запустите Oracle Forms Builder и откройте этот файл. Если вылетит ошибка FRM-18108,

то значит Forms Builder не знает, где находятся библиотеки apps, необходимые для компиляции формы. Нужно скопировать файлы с расширением *.pll из папки APPL_TOP\au\11.5.0\resource и сохраните где нибудь у себя на диске, например в папке appsdev.lib/Resource. Также для компиляции могут понадобиться некоторые формы, такие как APPSTAND.fmb , APPTREE.fmb и т.д., их тоже нужно скопировать в эту папку. А нужно прописать в реестре путь к этим файлам. Для этого открываем реестр и находим ветку \HKEY_LOCAL_MACHINE\SOFTWARE\Oracle,
затем ищем строковый параметр FORMS60_PATH, он может находится в какой-то ветке HOME0, HOME1 и т.д. После того как нашли этот параметр, добавляем в него путь к нашим библиотекам. Затем опять запускаем Oracle Forms Builder и пытаемся открыть файл TEMPLATE.fmb. Если фал открылся без ошибок, значит все в порядке, сохранем его как XXHELLOAPPS.fmb и продолжаем дальше. - Создайте новое окно, кликнув правой кнопкой на Окна/Создать.
Назовите это окно как XXHELLOAPPS, и присвойте ему класс свойств «WINDOW» из списка значений. - Создайте новую канву и озаглавьте ее XXHELLOAPPS, убедившись, что ее тип – Основная.
- Выберите в свойстве «Окно» канвы окно XXHELLOAPPS, и в свойствах окна «Первичная канва» окно XXHELLOAPPS.

- Теперь создайте блок и назовите его XXHELLOAPPS. Оставим ему тип «CONTROL» для простоты. Для этого нужно в свойстве «Блок Данных Базы Данных» указать «Нет».

- Поднимитесь на уровень формы в Объектном навигаторе и укажите свойство формы «Первый Блок Данных при Перемещении» - XXHELLOAPPS.

- Откройте триггер PRE-FORM на уровне формы и пропишете окно XXHELLOAPPS в коде (строчка должна выглядеть примерно так:
app_window.set_window_position('XXAPPSHELLO', 'FIRST_WINDOW');
Этим мы определяем, какое окно будет показано первым при открытии формы. - В теле пакета APPS_CUSTOM найдите такую строчку:
if (wnd = '<your first window>') then
app_window.close_first_window;
Замените <your first window> на XXAPPSHELLO. - Добавьте метку и поле с наименованием «Hello_World» к этому блоку. Для этого кликаем правой кнопкой в объектном навигаторе на блоке XXHELLOAPPS и выбираем пункт меню «Редактор разметки».
Затем указываем какую канву мы хотим редактировать – XXAPPSHELLO. В редакторе разметки на панели инструментов нажимаем на кнопку с буквой «Т» и на канве размещаем текстовый элемент. Пусть он будет содержать традиционные слова «Hello World». 
- Сгенерируйте форму на компьютере, нажав горячие клавиши Ctrl-T. Этим мы убедимся, что ничего критически важного мы не упустили.
- Залейте форму через FTP в папку $XXPO_TOP/forms/RU. (Для американской локали - $XXPO_TOP/forms/US). У вашей компании может быть другая папка для приложений разработчиков.
- Зайдите в папку $XXPO_TOP/forms/RU и сгенерируйте форму XXHELLOAPPS.fmb с помощью утилиты f60gen.
- В результате мы получим имполняемый файл XXHELLOAPPS.fmx.
- Заходим в Oracle Apps, выбираем полномочие разработчика. Открываем форму регистрации новой формы, Меню: Приложение/Форма. Регистрируем форму.
- Регистрируем функцию формы. Как регистрировать функцию написано в этой статье. Эта функция должна быть зарегистрирована для приложения «XX Purchаsing». (Или другого custom приложения).
- Теперь необходимо добавить пункт меню, чтобы эта функция была доступна для определенного тестового полномочия. Все, теперь вы можете открыть форму в своем тестовом полномочии.

Теперь несколько важных замечаний:
- Если у вас блок основан на таблице, и если в этом блоке есть несколько описательных полей, тогда лучше не пытайтесь получить значения этих полей в POST_QUERY триггере. Вместо этого, создайте представление в схеме apps и назначьте это представление в качестве основы для этого блока. Преимущество в том, что пользователь сможет делать запрос по этим описательным полям, если потребуется. Минус – вам придется реализовать DML логику собственноручно, замещая триггеры ON_INSERT, ON-UPDATE, ON-DELETE и ON-UNLOCK.
- Для каждого блока в форме создайте пакеты и тело пакетов на уровне формы. Ваши триггеры в блоке/элементах блока будут вызывать процедур из этих пакетов.
- Старайтесь не городить много PL/SQL кода в форме. Выносите сложную логику на уровень пакета базы данных.
- Старайтесь без особой необходимости не использовать глобальные переменные. Отдавайте преимущество переменным пакета формы.
- В блоке содержащим несколько записей (который отображается в виде таблицы) всегда добавляйте поле для указателя текущей записи (Current Record Indicator).
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

