oracle forms под oebs - быстрый старт

9
Oracle Forms под OEBS – быстрый старт. Подготовка Oracle Forms для написания форм под OeBS. Перед тем, как начать разработку форм под OeBS, нужно провести некоторые предварительные операции. 1. В директории где установлен Oracle Forms нужно создать папу Resource и скопировать в нее с сервера, на котором ведется разработка, все библиотеки *.pll из $AU_TOP$/resource. Также из $AU_TOP$/forms/RU в эту папку необходимо скопировать файлы APPSTAND.fmb и APSTAND.fmb. Это позволит использовать в разработке стандартные библиотеки Oracle Applications. В дальнейшем можно использовать этот набор библиотек, однако если вы будете вести разработку под другую версию OeBS, то рационально будет скопировать все библиотеки заново, так как они могут меняться от версии к версии. 2. В реестре для ORA_HOME, в котором установлен Oracle Forms, нужно изменить значение ключа FORMS60_PATH, добавив в него каталог, в котором находятся библиотеки, которые мы скопировали с сервера. Например, если Oracle Forms установлен в "C:\OraForms" значение ключа должно быть: "C:\ OraForms\resource;C:\OraForms\TOOLS\OPEN60\PLSQLLIB". 3. Если у вас нету файла формы TEMPLATE.fmb, то нужно его скопировать из $AU_TOP$/forms/RU - это шаблон для формы под OeBS, на основе которого нужно разрабатывать собственные формы. Создание формы. Общие принципы. Перед тем как создать форму, нужно проработать ее логическую модель. Создать объекты БД, на основе которых будет работать форма (таблицы и представления). Также нужно примерно представлять себе дизайн самой формы. Далее нужно скопировать файл TEMPLATE.fmb под именем, которое будет носить новая форма. По стандарту имя формы должно состоять из восьми символов, хотя это - не жесткое ограничение. После создание исходного файла откройте его в Oracle Forms и приступайте к разработке.

Upload: saken-rysbekov

Post on 20-Jan-2016

362 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle Forms под OEBS - быстрый старт

   

Oracle Forms под OEBS – быстрый старт.

Подготовка Oracle Forms для написания форм под OeBS.

Перед тем, как начать разработку форм под OeBS, нужно провести некоторые предварительные операции.

1. В директории где установлен Oracle Forms нужно создать папу Resource и скопировать в нее с сервера, на котором ведется разработка, все библиотеки *.pll из $AU_TOP$/resource. Также из $AU_TOP$/forms/RU в эту папку необходимо скопировать файлы APPSTAND.fmb и APSTAND.fmb. Это позволит использовать в разработке стандартные библиотеки Oracle Applications. В дальнейшем можно использовать этот набор библиотек, однако если вы будете вести разработку под другую версию OeBS, то рационально будет скопировать все библиотеки заново, так как они могут меняться от версии к версии.

2. В реестре для ORA_HOME, в котором установлен Oracle Forms, нужно изменить значение ключа FORMS60_PATH, добавив в него каталог, в котором находятся библиотеки, которые мы скопировали с сервера. Например, если Oracle Forms установлен в "C:\OraForms" значение ключа должно быть: "C:\OraForms\resource;C:\OraForms\TOOLS\OPEN60\PLSQLLIB".

3. Если у вас нету файла формы TEMPLATE.fmb, то нужно его скопировать из $AU_TOP$/forms/RU - это шаблон для формы под OeBS, на основе которого нужно разрабатывать собственные формы.

Создание формы.

Общие принципы.

 Перед тем как создать форму, нужно проработать ее логическую модель. Создать объекты БД, на основе которых будет работать форма (таблицы и представления). Также нужно примерно представлять себе дизайн самой формы.  Далее нужно скопировать файл TEMPLATE.fmb под именем, которое будет носить новая форма. По стандарту имя формы должно состоять из восьми символов, хотя это - не жесткое ограничение. После создание исходного файла откройте его в Oracle Forms и приступайте к разработке.

Изначально шаблон TEMPLATE.fmb содержит в себе общие данные, которые используются во всех формах системы. В нем определены:

1. Стандартные блоки, связанные с ними канвы и наборы значений (по типу календаря, диагностики и т.д.).

2. Привязанный набор стандартных библиотек, который обеспечивается общую функциональность формы под OeBS.

3. Стандартная обработка для общих триггеров формы.4. Описания классов свойств и визуальных атрибутов, которые используются в OeBS

(это нужно для того, чтобы готовая форма по дизайну не отличалась от других форм системы).

Page 2: Oracle Forms под OEBS - быстрый старт

 Общие принципы написания новой формы зависят от самой формы. Обычно в 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.

 На этом у нас главное окно и канва для него готовы. Точно так же в дальнейшем создаются и другие окна формы.

Создание блоков данных.

Page 3: Oracle Forms под OEBS - быстрый старт

 Создадим блок на основе объектов базы данных. Для этого удобнее воспользоваться мастером блоков данных (Data Block Wizard). Запустим мастер.

Далее по шагам:

1. Источник данных - Table or View.2. Находим нужный нам объект и подтягиваем список его колонок. Выбираем

необходимые нам колонки.3. Обычно в OeBS не практикуются связанные блоки данных (связи делаются

логические в коде формы), поэтому связей с родительским блоком данных создавать не надо. Если же нужно создать подчиненный блок, то необходимо связать его с родительским блоком нажав на кнопку "Create Relationship".

4. После этого нужно вызвать мастер создания разметки (Layout Wizard) для отображения элементов блока на форме.

5. После запуска мастера нужно выбрать канву, на которой будет размещен блок данных. У нас это Canvas1. Если канва имеет тип Tab, то нужно выбрать также закладку, на которой будут находиться элементы данного блока.

6. Из списка полей, которые мы выбрали в блоке, нужно отобрать поля, которые будут отображаться на форме. Каждому полю можно дать заголовок и установить параметры ширины и высоты этого поля на форме.

7. Далее нужно определить тип размещения блока на форме - Form для произвольного размещения элементов или Tabular - для табличного.

8. Если мы выбрали последнее, то нужно на следующем шаге указать сколько строк будет отображаться в таблице и расстояние между строками. В случае если тип Form, то в этом нету никакого смысла и нужно оставить значения по умолчанию.

9. При размещении блока на канве с типом Content (без закладок), каждый блок будет размещен на отдельном фрейме. В мастере можно сразу указать какой заголовок должен быть у фрейма (если это необходимо).

 На этом работа мастера закончена. Мы создали блок данных и отображение его на форме. Теперь надо подкорректировать некоторые специфические свойства созданных объектов:

 Для Блока:  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  Остальные свойства (атрибуты поля БД, выравнивание и прочие визуальные атрибуты) - по надобности.

 Для фрейма созданного на основе данного блока:

Page 4: Oracle Forms под OEBS - быстрый старт

 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).

Для этого можно воспользоваться мастером.

1. Пишем запрос, который будет начитывать список значений. В данном случае запрос должен содержать две величины - код и его описание. При этом автоматом будет создана группа записей.

2. Из полей, содержащихся в группе, выбираем поля, которые будут непосредственно отображаться в списке значений.

3. Указываем заголовки для полей в списке значений и их ширину. На этом же шаге определяем маппинг полей из списка значений в поля формы. Для этого нажимаем кнопку "Look up return item" на каждом из полей в списке значений, и в возникшем окне выбираем поле в нужном блоке данных, в которое будет возвращаться значение из списка значений.

4. Указываем заголовок списка значений и его размеры.5. Привязываем поля списка значений к соответствующим полям блока данных. Для

этого нужно одно из возвращаемых полей списка значений перенести в соседнее окно "Assigned Items". Это будет обозначать, что после того, как мы привязали это поле к списку значений, то при нажатии на это поле бует открываться этот список значений. В нашем случае мы привязываем список к полю Lookup_Text.

 На этом основные действия по созданию списка значений окончены. Если необходимо поменять значения маппинга столбцов в уже созданном списке значений, то можно воспользоваться соответствующим свойством LOV - Column Mapping Properties. Если же нужно поменять привязку списка значений, то это можно сделать с помощью соответствующего атрибута List of Values блока данных.

Page 5: Oracle Forms под OEBS - быстрый старт

 Маленькая хитрость. Если у нас есть поле с типом "дата" и в нем желательно не просто вводить дату, а выбирать ее из календаря, то для этого есть специальный список значений - 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   g_form_name VARCHAR2(100) := 'XXPAYBRL'; -- Имя формы   g_form_desc VARCHAR2(250) := 'Новая форма для...'; -- Описание формы   g_appl_name VARCHAR2(50) := 'XXFIN'; -- Краткое имя приложения для формы

Page 6: Oracle Forms под OEBS - быстрый старт

  g_appl_id NUMBER;   g_form_id NUMBER;   g_function_id NUMBER; BEGIN   begin     select a.application_id into g_appl_id     from fnd_application a     where a.application_short_name = g_appl_name;   exception     when no_data_found then       DBMS_OUTPUT.put_line('Application ''' || g_appl_id || ''' not exists!');       raise;   end;   begin     select form_id into g_form_id     from fnd_form     where form_name = g_form_name;     DBMS_OUTPUT.put_line('Form ''' || g_form_name || ''' exists.');   exception     when no_data_found then       insert into fnd_form(application_id, form_id, form_name, last_update_date,         last_updated_by, creation_date, created_by, last_update_login, audit_enabled_flag)       values (g_appl_id, fnd_form_s.nextval, g_form_name, sysdate, 1, sysdate, 1, 0, 'N')       returning form_id into g_form_id;

      insert into fnd_form_tl(application_id, form_id, language, user_form_name,         created_by, creation_date, last_updated_by, last_update_date, last_update_login,         description, source_lang)       values (g_appl_id, g_form_id, 'RU', g_form_name, 1, sysdate, 1, sysdate, 0,         g_form_desc, 'RU');       DBMS_OUTPUT.put_line('Form ''' || g_form_name || ''' created.');   end;      begin     select function_id into g_function_id     from fnd_form_functions     where function_name = g_form_name;     DBMS_OUTPUT.put_line('Form Function''' || g_form_name || ''' exists.');   exception     when no_data_found then       fnd_function_security.FORM_FUNCTION(         function_name => g_form_name,         form_name => g_form_name,         type => 'FORM',         user_function_name => g_form_name        );       select function_id into g_function_id       from fnd_form_functions       where function_name = g_form_name;              DBMS_OUTPUT.put_line('Form Function''' || g_form_name || ''' created.');   end;

Page 7: Oracle Forms под OEBS - быстрый старт

END;

 После этого нужно добавить функцию формы в меню для нужных полномочий. Это делается в полномочиях системного администратора в Приложение - Меню.

 Чтобы скомпилировать форму на сервере нужно по 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.