Перед
тем, как начать разработку форм под OeBS, нужно провести
некоторые предварительные операции.
Перед тем как создать
форму, нужно проработать ее логическую модель. Создать объекты БД, на основе
которых будет работать форма (таблицы и представления). Также нужно примерно
представлять себе дизайн самой формы.
Далее нужно скопировать файл TEMPLATE.fmb под
именем, которое будет носить новая форма. По стандарту имя формы должно
состоять из восьми символов, хотя это - не жесткое ограничение. После создание
исходного файла откройте его в Oracle Forms и приступайте к разработке.
Изначально
шаблон TEMPLATE.fmb содержит в себе общие данные,
которые используются во всех формах системы. В нем определены:
Общие принципы
написания новой формы зависят от самой формы. Обычно в OeBS
формы довольно сложные, с множеством окон, в каждом из которых размещены
несколько блоков данных. Поэтому в данном руководстве будет описан пример
создания формы именно для таких форм. Для примера, у нас в форме должно быть
два окна и несколько блоков данных (штук эдак 5 - 6).
Для начала создаем
первое окно, содержащее в себе три блока данных. Окна и канвы в таких случаях
лучше создавать вручную, не пользуясь стандартным мастером.
Для создания окна станьте в объектном навигаторе на элемент Windows и нажмите "+".
Нужно дать имя этому окну, назовем его WINDOW1.
Далее нужно установить соответствующие свойства окна:
Subclass Information
- Property Class - Window
Title - Заголовок формы
Primary Canvas - пока
оставить пустым
Bevel - None
Другие свойства в группе Functional - на ваше
усмотрение
Width, Height - по
желанию, обычно - 8 и 5 соответственно
Далее создаем канву, на которой будет размещены визуальные
элементы обработки данных. Для этого станьте в объектном навигаторе на элемент Canvases и нажмите "+". При этом будет создана
новая канва. Назовем ее Canvas1.
Установим необходимые свойства канвы:
Subclass Information
- Property Class - Canvas
Canvas Type - Content (возможны и другие варианты, но в основном главная
канва окна формы имеет именно это свойство).
Window - WINDOW1
Bevel - None
Visual Attribute Group - Canvas
Остальные поля - по усмотрению
Далее нужно вернуться к окну
WINDOW1 и установить его свойство Primary Canvas в Canvas1.
Если на форме необходимо к какой-то
из областей разбиение данных на закладки, то нужно создать еще одну канву,
которая буде относиться к тому же окну. Например - Canvas2.
Необходимые свойства:
Subclass Information
- Property Class -
TAB_CANVAS
Canvas Type - Tab
Window - WINDOW1
Далее необходимо определить и создать нужное количество закладок,
дать им осмысленные названия. Subclass Information - Property Class - TAB_PAGE.
На этом у нас главное окно и канва для него готовы.
Точно так же в дальнейшем создаются и другие окна формы.
Создадим блок на основе
объектов базы данных. Для этого удобнее воспользоваться мастером блоков данных
(Data Block Wizard). Запустим мастер.
Далее
по шагам:
На этом работа мастера
закончена. Мы создали блок данных и отображение его на форме. Теперь надо
подкорректировать некоторые специфические свойства созданных объектов:
Для Блока:
Subclass Information - Property
Class - BLOCK
DML Data Target Name - имя таблицы или представления, на основе которого
построен блок
Show Scroll Bar - Yes и Scroll
Bar Canvas - Canvas1 (если
необходимо скроллирование данных)
Свойства блока по работе с БД нужно установить в зависимости от логики
работы блока (возможность вставки, обновления, удаления, количество строк в
буфере и т.д.)
Для полей блока, которые визуально отображаются в форме:
Subclass Information
- Property Class - в
зависимости от типа поля, TEXT_ITEM - если это текстовое поле, TEXT_ITEM_DATE -
если поле типа "дата", CHECKBOX - если это чек-бокс и т.д.
Popup Menu - POPUP
Visual Attribute Group - DATA (для чек-боксов
может быть RADIO_CHECK)
Prompt Visual Attribute Group -
ASSOSIATED_PROMPT
Остальные свойства (атрибуты поля БД, выравнивание и прочие
визуальные атрибуты) - по надобности.
Для фрейма созданного на основе данного блока:
Subclass Information - Property Class - FRAME_RECT
Layout Data Block - Null. Если вы
этого не сделаете, то потом возникнут большие проблемы с размещением полей и
элементов управления на канве. Дело в том, что если это свойство проставлено,
то Oracle Forms
подсчитывает допустимые размеры фрейма в зависимости от полей, которые содержит
блок данных. Поэтому выставить нужную высоту фрейма бывает просто невозможно.
Далее можно разместить на форме нужные элементы управления. Для этого в
блок данных нужно добавить вручную соответствующий объект. В основном это
кнопки, дополнительные чек-боксы
и прочее. Для них так же нужно проставить необходимые значения визуальных
атрибутов. Например для кнопки нужно проставить:
Subclass Information
- Property Class - BUTTON
Implementation Class
- oracle.apps.fnd.ui.Button
Visual Attribute Group и Current Record Visual Attribute
Group - BUTTON
Tooltip Visual Attribute Group - TOOLTIP
Также нужно помнить, что если элемент добавлен в блок вручную, то
он не привязан к канве, к которой привязаны остальные элементы блока и нужно
руками проставить соответствующие свойства элемента.
Если нужно какое-то поле сделать лукапом,
который начитывается с помощью набора значений, то необходимо создать еще одно
поле текстового типа. Например ели у нас есть поле Lookup_Code, то создается поле Lookup_Text.
Именно у него нужно проставить канву, на которой оно будет отображено.
Далее необходимо создать группу записей (Record
Group), которая определяет запрос, который будет начитывать
список значений, и сам список значений (List Of Value).
Для
этого можно воспользоваться мастером.
На этом основные
действия по созданию списка значений окончены. Если необходимо поменять
значения маппинга столбцов в уже созданном списке
значений, то можно воспользоваться соответствующим свойством LOV - Column Mapping Properties. Если же нужно поменять привязку списка
значений, то это можно сделать с помощью соответствующего атрибута List of Values
блока данных.
Маленькая хитрость. Если у нас есть поле с типом "дата" и в нем
желательно не просто вводить дату, а выбирать ее из календаря, то для этого
есть специальный список значений - ENABLE_LIST_LAMP. Фактически этот список не
делает ничего, это пустой набор значений. Однако он позволяет указать, что
какое-то поле является лукапом. Ставим этот список
значением свойства List of Values нужного поля. После чего создаем на этом поле override триггер KEY-LISTVAL, в тексте которого пишем код: calendar.show; . После этого при переходе на это поле будет
открываться календарь для выбора даты.
В принципе, размещение блока данных на этом завершено. В дальнейшем можно
баловаться с установкой свойств объектов формы, приводя форму к желаемому виду,
но вышеперечисленные атрибуты лучше не трогать, так как это - стандарт для форм
под OeBS.
Таким же образом можно создать и другие блоки данных. Если же блок не
связан с базой данных, то его нужно создавать вручную. Также как и элементы
этого блока. При этом необходимо не забыть проставить свойства блока Database Data Block
в No, Query Data Source Type
и DML Data Target Name - в None. А для элементов
блока проставить свойство Database Item в No.
После создания каркаса
формы необходимо навесить на форму логику. Логика в формах вешается на
триггеры. Также существуют Program Units, которые предназначены для написания процедур,
функций и пакетов внутри Oracle Forms.
Хорошим тоном считается не наворачивать в триггерах большие куски кода, а
оформлять их в процедурах, которые будут вызываться из триггеров.
В плане логики общая работа Oracle Forms мало чем отличается работой под OeBS.
И там и там логика написания кода практически одна и та же. Т.е. так же активно
используются стандартные процедуры Oracle Forms по типу name_in, execute_query, go_block, go_item и т.д.
Хотя и есть некоторые нюансы. Которые заключаются в основном в вызовах
стандартных процедур OeBS, особенно app_standard.event - для вызова стандартного обработчика
какого-то события.
Так же в шаблоне формы под OeBS есть пакет
APP_STANDART. В нем содержится каркас для процедур, которые будут
использоваться при работе с формой, в частности - процедуры open_window
и close_window, которые вызываются при открытии и
закрытии окна соответственно. В них нужно проставить имена своих окон формы и
при надобности добавить дополнительный код, который будет вызываться при этих
операциях.
Для регистрации формы в
OeBS нужно зарегистрировать форму и фунцию формы в системе и скомпилировать форму на сервере. К
сожалению если вы пишите форму под OeBS, то локально
на своем компьютере ее можно только скомпилировать, запустить ее не удастся.
Поэтому отлаживать написанную форму придется на сервере.
Для регистрации формы и форм-функции
достаточно выполнить скрипт:
DECLARE |
После этого нужно добавить
функцию формы в меню для нужных полномочий. Это делается в полномочиях системного
администратора в Приложение - Меню.
Чтобы скомпилировать форму на сервере нужно по SCP зайти в каталог, в
котором находится $APPL_TOP$. В корне каталога нужно запустить скрипт для инициализации окружения: ". APPSORA.env" Далее нужно перейти в $AU_TOP$/forms/RU, скопировать туда форму и выполнить скрипт:
f60gen module=FORMNAME userid=APPS/<пароль_для_APPS>
output_file=$XXAPPL_TOP/forms/RU/ FORMNAME batch=no
compile_all=special |
где FORMNAME - имя формы,
XXAPPL - краткое имя приложения, в котором зарегистрирована форма.
Для oebs 12 вместо файла f60gen нужно исполнять
файл frmcmp_batch.