Опубликован: 25.09.2009 | Доступ: свободный | Студентов: 911 / 84 | Оценка: 3.72 / 2.78 | Длительность: 10:50:00
Лекция 8:

Меню в Oracle Forms

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

Удаление меню

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

  1. Выбрать нужный элемент и нажать кнопку Del.
  2. Выполнить команду главного меню Edit | Delete.
  3. Нажать кнопку Delete навигатора объектов.

При удалении меню важно помнить, что если меню, которое вы собираетесь удалить, содержит подменю, то при удалении главного меню вложенное удалится автоматически.

Свойства меню

Вы можете управлять поведением меню, изменяя значения атрибутов модуля меню, объекта меню и его элементов. В Oracle Forms вы можете очень быстро создавать функциональные меню, не прилагая особых усилий для написания лишнего кода. В большинстве случаев какое бы меню мы ни создавали, в нем обязательно будут присутствовать стандартные или часто используемые команды, программирование которых будет отнимать у вас время. В меню Oracle Form существуют определенные параметры, устанавливая значения которых, можно назначить элементу меню выполнения стандартных команд. В Oracle Forms вы можете назначить элементу меню выполнение стандартной операции, просто установив значение определенного параметра. При работе с меню в Oracle Forms вам доступны свойства модуля, меню и элемента меню.

Свойства модуля меню

Свойства модуля меню позволяют разработчикам управлять параметрами инициализации и защиты меню.

  • Главное меню (Main Menu) - имя главного меню, которое будет отображено при запуске.
  • Директория меню (Menu Directory) - место размещения исполняемого файла меню .MMX. Если директория не указана, то Forms при попытке запуска меню будет обращаться к той директории, из которой была запущена форма.
  • Имя файла меню (Menu File Name) - имя исполняемого файла меню .MMX, которое Oracle Forms будет искать при запуске формы.
  • Код запуска (Startup Code) - блок PL/SQL, который будет выполнен после загрузки модуля меню в память при запуске формы.
  • Использовать защиту (Use Security) - если значение этого свойства - "Yes", то Oracle Forms будет использовать схему защиты, определенную для меню в свойстве "Роли меню".
  • Роли модуля (Module Roles) - роль в базе данных, доступная для элементов этого меню.
Свойства модуля меню.

Рис. 8.9. Свойства модуля меню.

В отличие от модуля объект меню имеет единственный функциональный атрибут - Tear-Off Menu (рис. 8.10). Меню в отдельном окне (Tear-Off Menu) - если свойство этого атрибута установлено в "Yes", то меню будет отрывным.

Свойства меню.

Рис. 8.10. Свойства меню.

Свойства элемента меню

Элементы меню являются функциональными объектами меню и, соответственно, имеют намного больше атрибутов, чем предыдущие объекты. Значения атрибутов элемента меню можно менять (рис. 8.11) как на этапе проектирования, так и во время выполнения формы.

  • Включен (Enabled) - это свойство управляет состоянием элемента. Если значение атрибута установлено на "Yes", то элемент включен и доступен для манипулирования мышью.
  • Метка (Label) - текстовая метка, выводимая для элемента меню. Старайтесь именовать пункты меню как можно короче и содержательнее, так, чтобы даже самый неосведомленный пользователь, прочитав наименование пункта меню, смог понять, какая команда с ним связана.
    Свойства элемента меню.

    увеличить изображение
    Рис. 8.11. Свойства элемента меню.
  • Тип элемента меню (Menu Item Type) - это свойство определяет тип элемента меню.
  • Магический элемент (Magic Item) - это свойство позволяет предопределить пункт меню, ассоциируя его с одной из предоставленных команд:
    • Вырезать;
    • Копировать;
    • Вставить;
    • Очистить;
    • Отменить;
    • Справка;
    • О (About);
    • Окно.
  • Радиогруппа элементов меню (Menu Item Radio Group) - имя радиогруппы, с которой ассоциирован данный пункт меню.
  • Тип команды (Command Type) - тип команды меню. Для элемента меню вы можете выбрать один из трех типов команд:
    • NULL;
    • Меню;
    • PL/SQL.
  • Код пункта меню - это блок PL/SQL, исполняемый при выборе элемента меню.
  • Имя подменю (Subclass Menu) - имя подменю, ассоциированное с элементом. Это свойство доступно, если свойство "Тип команды" имеет значение "PL/SQL".
  • Горячие клавиши (Keyboard Accelerator) - это свойство определяет "горячую" функциональную клавишу, которая будет соответствовать пункту меню. Это свойство доступно только в том случае, если значение атрибута "Тип команды" имеет значение " NULL ".
  • Виден в меню (Visible in Menu) - это свойство управляет отображением пункта меню, делая его невидимым во время выполнения, если значение установлено на "No".
  • Виден в горизонтальном меню (Visible in Horizontal Menu Bar) - если значение этого свойства - "Yes", то пункт меню появится в горизонтальной инструментальной панели меню.
  • Виден в вертикальном меню (Visible in Vertical Menu Bar) - если значение этого свойства - "Yes", то пункт меню появится в вертикальной инструментальной панели меню.
  • Иконка в меню (Icon in Menu) - если значение этого свойства установлено на "Yes", то иконка будет выводиться в раскрывающемся меню.
  • Имя файла иконки (Icon FileName) - имя файла картинки для отображения иконки в меню.
  • Роли меню (Item Roles) - это свойство определяет, какие роли меню имеют доступ к данному элементу меню.
  • Показывать без привилегий (Display Without Privilege) - если значение этого свойства установлено на "Yes", то пользователь, не имеющий привилегии доступа, сможет увидеть элемент.
  • Видимый (Visible) - если значение этого свойства установлено на "Yes", то элемент меню становится невидимым.

Программирование элементов меню

Прежде чем программировать меню, необходимо выбрать для элемента соответствующий тип исполняемой команды. Ниже в табл. 8.1 представлены возможные варианты свойств элемента меню "Тип команды".

Таблица 8.1.
Параметр Описание
NULL Этот параметр означает, что никакие операции не выполняются. Данный тип применяется как разделитель или указатель временного элемента меню.
PL/SQL Этот параметр означает, что в качестве команды пункта меню будет выполнен блок PL/SQL, который может включать в себя процедуры и функции модуля формы. Помните, что, создавая PL/SQL-команду в контексте меню, вы должны будете обращаться к элементам модуля косвенно, то есть через команды COPY и Name_In.
Menu Этот параметр означает, что при выборе элемента меню будет вызвано подменю. Назначайте этот тип команды всем элементам меню, имеющим подменю.

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

  1. Откройте меню FMENU.MMB.
  2. Выберите элемент меню "Открыть". Наша задача - сделать так, чтобы при выборе этого элемента меню на экране появлялось окно выбора файлов. Находясь на элементе, вызовите всплывающее меню щелчком правой кнопки мыши и выберите пункт PL/SQL Editor.

    В теле редактора наберите и скомпилируйте следующий код:

    Вызов диалога "Открыть"

    DECLARE
     FileNM varchar2(300);
    BEGIN
     Filenm:=GET_FILENAME('');
     …
    END;
  3. Далее выберите элемент "Сохранить". Наша задача - сделать так, чтобы при выборе этого элемента меню выполнялась фиксация всех изменений, сделанных в форме. Создайте PL/SQL-команду для этого элемента:

    Команда "Сохранить"

    BEGIN
     DO_KEY('COMMIT_FORM');
    END;
  4. Выберите элемент "Отменить". Наша задача - сделать так, чтобы при выборе этого элемента меню выполнялся откат всех незафиксированных изменений в форме. Создайте PL/SQL-команду для элемента и наберите следующий код:

    Команда "Отмена"

    BEGIN
     DO_KEY('ROLLBACK');
    END;
  5. Выберите элемент "Печать". Наша задача - сделать так, чтобы при выборе этого элемента вызывался отчет my_rep.rdf. Создайте PL/ SQL-команду для элемента и наберите следующий код:

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

    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;
  6. Выберите элемент "Выход | Сохранить изменения". Наша задача - сделать так, чтобы при выборе этого элемента форма закрылась с сохранением изменений, но без проверки формы. Создайте PL/SQL-команду для элемента и наберите следующий код:

    Команда "Выход|Сохранить изменения"

    BEGIN
     EXIT_FORM(do_commit, no_validate);
    END;
  7. Выберите элемент "Выход | Без Сохранения изменений". Наша задача - сделать так, чтобы при выборе этого элемента форма закрылась. Создайте PL/SQL-команду для элемента и наберите следующий код:

    Команда "Выход|Без Сохранения изменений"

    BEGIN
     EXIT_FORM(no_commit, no_validate);
    END;
  8. Перейдем к следующему меню - "Блок". Выберите элемент меню "Блок | Следующий". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на предыдущий блок.

    Команда "Блок | Предыдущий"

    BEGIN
     DO_KEY('NEXT_BLOCK');
    END;
  9. Выберите элемент меню "Блок | Предыдущий". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на предыдущий блок.

    Команда "Блок | Предыдущий"

    BEGIN
     DO_KEY('PREVIOUS_BLOCK');
    END;
  10. Выберите элемент меню "Блок|Отчистить". Наша задача - сделать так, чтобы при выборе этого элемента выполнялась очистка блока.

    Команда "Блок | Отчистить"

    BEGIN
     DO_KEY('CLEAR_BLOCK');
    END;
  11. Перейдем к следующему, заключительному, меню - "Запись". Выберите элемент меню "Запись | Первая". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на первую запись в блоке.

    Команда "Запись | Первая"

    BEGIN
     FIRST_RECORD;
    END;
  12. Выберите элемент меню "Запись | Последняя". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на последнюю запись в блоке.

    Команда "Запись | Последняя"

    BEGIN
     LAST_RECORD;
    END;
  13. Выберите элемент меню "Запись | Следующая". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на следующую запись в блоке.

    Команда "Запись | Следующая"

    BEGIN
     DO_KEY('NEXT_RECORD');
    END;
  14. Выберите элемент меню "Запись | Предыдущая". Наша задача - сделать так, чтобы при выборе этого элемента выполнялся переход на предыдущую запись в блоке.

    Команда "Запись | Предыдущая"

    BEGIN
     DO_KEY('PREVIOUS_RECORD'); 
    END;
  15. Выберите элемент меню "Запись | Создать". Наша задача - сделать так, чтобы при выборе этого элемента выполнялась вставка новой записи в блок.

    Команда "Запись | Создать"

    BEGIN
     DO_KEY('CREATE_RECORD');
    END;
  16. Выберите элемент меню "Запись | Дублировать". Наша задача - сделать так, чтобы при выборе этого элемента выполнялось дублирование записи.

    Команда "Запись | Дублировать"

    BEGIN
     DUPLICATE_RECORD;
    END;
  17. Выберите элемент меню "Запись | Удалить". Наша задача - сделать так, чтобы при выборе этого элемента запись была удалена.

    Команда "Запись | Удалить"

    BEGIN
     DUPLICATE_RECORD;
    END;

Если вы запрограммировали все элементы меню, можно приступать к подключению меню, предварительно выполнив компиляцию PL/ SQL-кода - Program | Compile PL/SQL, а затем и компиляцию самого модуля. Cкомпилировать модуль меню можно командой Program | Compile Module.

< Лекция 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 отчета и ее применение, но применения так и нет