Опубликован: 25.09.2009 | Уровень: специалист | Доступ: платный
Лекция 8:

Меню в Oracle Forms

< Лекция 7 || Лекция 8: 123 || Лекция 9 >

Использование PL/SQL в меню

Как и в случае с формой, вы можете управлять поведением меню и объектами, которые его составляют, во время выполнения, используя PL/SQL и встроенные подпрограммы Forms Builder. Основным отличием PL/SQL-программы, написанной в меню, от программы, написанной в модуле формы, является возможность исключительно косвенного обращения к элементам меню.

Когда вы проектируете и программируете меню, вы должны не забывать о том, что меню - это прежде всего средство быстрого доступа к наиболее часто выполняемым операциям, а не средство для реализации сложной логики приложения: проверки введенных значений, создания блокировок и так далее. Например, если вы создаете элемент меню, выполняющий команду COMMIT, то различные проверки перед сохранением изменений лучше выполнить в соответствующих триггерах модуля формы. Так, выполнение команды DO_KEY('COMMIT') меню аналогично срабатыванию триггера " KEY-COMMIT " формы, поэтому необходимые проверки вычисления можно выполнить в нем. Ниже перечислены основные операции, которые лучше всего отображать в меню:

  • взаимодействие с БД Oracle (операции DML и DDL);
  • выполнение предыдущих действий;
  • выполнение сортировки в блоке, то есть сортировка в блоке по убыванию или возрастанию;
  • исполнение команд операционной системы;
  • вызов другого продукта Developer (Oracle Reports, Oracle Graphics);
  • вызов встроенной подпрограммы DO_KEY для исполнения триггера клавиши;
  • вызов пользовательских триггеров встроенной подпрограммой EXECUTE_TRIGGER.

В этом случае использование пользовательских триггеров оправдано, так как в них вы можете выполнять анонимные PL/SQL-блоки с прямым обращением к элементам. Рассмотрим пример программирования элементов меню:

  1. Взаимодействие с БД Oracle. Например, создайте пункт меню "Новая запись" и напишите для него следующий код:

    Команда "Новая запись"

    if :system.block_status!='NEW' then
     create_record; 
    ELSE 
     ...
    END IF;
  2. Вызовите пользовательский триггер:

    Команда "Описание действия вашего триггера"

    EXECUTE_TRIGGER('my_trg');
  3. Вызовите другие продукты Oracle Developer:

    Команда "Печать"

    DECLARE
    rep_url varchar2(300);
    BEGIN
     rep_url:='Ошибка! Недопустимый объект гиперссылки.
      ||'Repsrv&report=my_rep.rdf&desformat=htmlcss&destype=cache '
      ||'&userid=user/pw@database&P_NAME ='
      ||:parameter.param_name
      ||'&paramform=no';
     WEB.SHOW_DOCUMENT(rep_url,'_blank');
    END;
  4. Выполните команду операционной системы, например, запустите калькулятор:

    Команда "Калькулятор"

    HOST('calc.exe');
  5. Выполнение сортировки в блоке. Например, выполните сортировку по возрастанию:

    Команда "Сортировка по возрастанию"

    set_block_property ('block_name', 
                   ORDER_BY, 
                   :system.current_item ||' asc');

"Магические" элементы

Ранее в этой же главе мы уже затрагивали тему о магических элементах, теперь остановимся на ней подробнее. "Магические", или Мастер-элементы - это элементы, имеющие функциональность по умолчанию и не требующие дополнительной программной обработки. Мастер-элементы полностью соответствуют командам, выполняемым из стандартного меню, и не требуют дополнительного подключения клавиш акселератов и команд PL/SQL, так как Forms Builder выполняет все это автоматически. Ниже приведена табл. 8.2 всех типов Мастер-элементов.

Таблица 8.2. Типы Мастер-элементов
Мастер-элемент Тип команды Функциональность
Для того чтобы элемент выполнял нужную функцию, к нему
ABOUT, UNDO Все кроме MENU обязательно и необходимо присоединить какую-либо команду, следовательно, функциональность по умолчанию отсутствует.
Clear, Copy, Cut, Paste Null Все перечисленные команды выполняют функции, определен- ные их именами, и при этом не требуется присваивать команду элементу меню.
Для этого Мастер-элемента функциональность по умолча-
Help Menu нию недоступна, поэтому вам необходимо назначить команду этого типа подменю.
Exit (Quit) Null Все перечисленные команды выполняют функции, определен- ные их именами, и при этом не требуется присваивать команду.
Window Null или Menu Элемент Window вызывает подменю по умолчанию со списком всех открытых окон. Операторы могут активизировать окно, выбрав его из подменю. Этот элемент может работать с двумя типами команд: Null, Menu.

Подключение меню к форме

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

  1. Создайте новую форму.
  2. Разместите хотя бы один элемент на форме, чтобы ее можно было запустить. Вы также можете открыть любую существующую форму для выполнения примера.
  3. Вызовите палитру свойств модуля формы и установите значение свойств, как показано ниже:
    • Menu Module - FMENU ;
    • Initial Menu - MYMENY.
    Примечание: даже если файл меню расположен в той же директории, что и вызывающая форма, указывайте не только имя меню, но и путь, например, C:\FMENU.
  4. Откройте меню FMENU и выполните генерацию модуля для создания исполняемого файла FMENU.MMX. Если меню не будет сгенерировано, то при запуске формы вы получите ошибку чтения меню.
  5. Откройте палитру свойств модуля меню FMENU и установите значение свойств, как показано ниже:
    • Main Menu - MYMENU ;
    • Menu Directory - c:\forms\example\menu.

Запустите форму на выполнение и попробуйте поработать с меню.

Если при изменении свойств вы допустили ошибку или какой-либо элемент меню не будет содержать PL/SQL-команду, то при попытке запуска меню вы получите сообщение об ошибке (рис. 8.12) - "Невозможно читать файл FMENU".

Сообщение об ошибке при попытке запуска меню

Рис. 8.12. Сообщение об ошибке при попытке запуска меню

Если вы работаете с многомодульным приложением, то можете назначить вызываемой форме текущее меню, используя параметр DO_REPLACE процедуры CALL_FORM при вызове формы процедурой CALL_FORM. По умолчанию при вызове формы процедурой CALL_ FORM применяется параметр NO_REPLACE, который означает, что вызываемая форма не будет наследовать меню родителя.

Типы меню

В предыдущих разделах мы с вами научились создавать стандартное меню, элементы которого имели вид текстовых ярлыков. В Oracle Forms вы можете изменять вид отображаемого элемента и его функциональность, изменяя его тип. Свойство "Тип элемента меню" используется для изменения типа отображаемого пункта меню. Создавая элемент меню, вы можете выбрать один из четырех типов (табл. 8.3).

Таблица 8.3. Типы элементов меню
Значение Описание
Простой (Plain) Стандартный тип меню - просто ярлык с текстовой меткой.
Выбор (Check) Рядом с текстовой меткой отображается элемент CheckBox в виде галочки. Такой тип меню может находиться в одном из двух состояний: True или False.
Радио (Radio) Элемент меню превращается в одну из радиокнопок радиогруппы, также принимая значения True или False.
Разделитель (Separator) Элемент меню превращается в линию-разделитель, которая визуально разделяет группу элементов меню на группы.
Магический (Magic) Элемент меню, для которого предусмотрены встроенные функциональные средства реализации. Такой элемент может превращаться в одну из часто используемых команд: Вырезать, Копировать, Вставить и т. д. Вид команды для магического элемента можно выбрать в свойстве "Магический элемент". Магические элементы позволяют избежать лишнего кодирования часто используемых команд. Внешний вид такого элемента зависит от платформы, на которой производится запуск меню.

Для того чтобы установить новый тип элемента, достаточно изменить значение свойства "Тип элемента меню" (рис. 8.12).

Типы элементов меню

Рис. 8.12. Типы элементов меню

Радиокнопки и выключатели работают по такому же принципу, как и одноименные элементы модуля формы.

Примечание: используйте элементы Check и Radio как переключатели каких-либо состояний, а не инициаторы каких-либо действий.

Обращение к элементам меню

Для обращения к элементам меню используйте синтаксис:

имя_меню.имя_элемента

Для получения значения состояния радиокнопки или выключателя (выбор) меню используйте функцию GET_MENU_ITEM_PROPERTY, а для установки значения - функцию SET_MENU_ITEM_PROPERTY.

Создание срываемых меню

Срываемое меню - это меню, которое пользователь может "оторвать" от линейки меню и расположить в любом месте. Для того чтобы создать срываемое меню, выполните следующие действия:

  1. Находясь в Menu Editor или в навигаторе объектов, выберите меню, например, MYMENU.
  2. Вызовите палитру свойств для этого меню и установите свойство Tear-off равным True.
< Лекция 7 || Лекция 8: 123 || Лекция 9 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет
Андрей Кошелев
Андрей Кошелев
Россия, Москва, Московская Финансово-Юридическая Академия
Артем Чуйко
Артем Чуйко
Россия, Самара