Опубликован: 17.09.2009 | Уровень: специалист | Доступ: свободно
Лекция 10:

Элементы Forms Builder. Элементы списка и невводные элементы

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Аннотация: В этой лекции слушатель научится создавать элементы отображения, картинки, кнопки, вычисляемые элементы. Также в этой лекции слушатель научится создавать элемент-список, наполнять элемент статически и динамически, использовать его как комбинированный список, делать снимок элемента.

Цель лекции: ознакомить слушателя с элементом списка и невводными элементами.

Создание элементов списков (List Items)

Элемент списка (List Item) – это элемент Oracle Forms, предназначенный для отображения данных, причем отображение и возможность форматирования данных списка напрямую зависит от выбранного стиля списка. Различают три типа элементов списка:

  • Всплывающий список – элемент списка стиля "всплывающий список", первоначально выглядит как одно поле (подобно полю элемента текста). Когда оператор выбирает иконку списка, появляется список доступных вариантов.
  • Текстовый список – элемент списка стиля "текстовый список", выглядит как прямоугольная рамка, которая выводит фиксированное количество значений. Если текстовый список содержит значения, которые нельзя вывести (из-за области возможного вывода этого элемента), то появляется вертикальная линия прокрутки, позволяющая оператору просмотреть и выбрать невыведенные значения.
  • Комбинированный список – элемент списка стиля "комбинированная рамка", объединяет характеристики элементов текста и списка. В отличие от элементов списка стиля всплывающего или текстового списка, элемент списка стиля комбинированная рамка будет как выводить фиксированные значения, так и принимать одно вводимое оператором значение.

Основные функциональные свойства

  • Включен – этот параметр отвечает за состояние элемента списка, по умолчанию имеет значение "Да", то есть включен.
  • Элементов в списке – при выборе этого свойства запускается окно List Elements, где в поле List Elements вводятся данные, которые будут отображены в списке, а в поле List Item Value – значения этих данных.
  • Присваивание значений другие – определяет, как понимать выбранные или присвоенные значения в отличие от заданных. Это свойство не пригодится вам только в случае использования комбинированных списков, поскольку в этом случае пользователь может вводить и корректировать данные. Вот два варианта задания этого свойства:
    • Укажите, что элемент списка будет отвергать другие значения как неразрешенные.
    • Укажите, какой составляющий элемент должен выбираться, если значение элемента списка будет другим значением.
  • Класс выполнения – в этом параметре указывается класс для выполнения Java Bean.
  • Ограничение на регистр – определяет регистр для текста, введенного в элемент данных или в параметр подстановки для меню.
  • Значения по умолчанию – вводимое вами здесь значение по умолчанию указывает для элемента списка первоначальное значение и таким образом определяет, какой элемент в списке будет первоначально выбран. Значение по умолчанию не указывается, когда:
    • элемент списка принимает другие значения;
    • значение, связанное с одним из составляющих элементов списка, определено как NULL.

Есть и другой способ сделать элемент текущим: извлечь его в элемент списка или присвоить ему значение NULL. Вид элемента списка NULL во время выполнения зависит от стиля вывода:

  1. для всплывающего списка – в элементе текста не выводится никакого текста;
  2. для текстового списка – в списке не подсвечивается ни один элемент;
  3. для комбинированной рамки – в элементе текста не выводится никакого текста.

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

  1. для всплывающего списка – операторы исключают элемент, выбирая составляющий элемент NULL;
  2. для текстового списка – операторы исключают элемент, отменяя выбор текущего выбранного составляющего элемента;
  3. для комбинированной рамки – операторы исключают элемент, выбирая составляющий элемент NULL.

Примечание: учтите, что значение элемента списка будет равным NULL до тех пор, пока блок не будет содержать записей, "да" – если вы установите свойство Default Value (значение по умолчанию), а поскольку Forms инициирует создание записи при перемещении к блоку, то вам достаточно программно произвести перемещение с помощью GO_BLOCK либо GO_ITEM.

Создание элемента списка

При создании элемента списка в окне свойства List Elements, определяя каждый новый элемент списка, вы должны связать его со значением List Value (значение элемента списка). При выборе пользователем составляющего элемента значение элемента списка изменяется на значение, связанное с этим составляющим, то есть на значение, указанное в List Value. То же происходит и при извлечении значения из базы данных или присваивании такового программно; при этом составляющий элемент, значение которого соответствует извлеченному или присвоенному значению, становится выбранным составляющим в этом списке.

Элемент списка может также хранить извлеченное или присвоенное значение, которое не является одним из значений, связанным с определенным составляющим элементом в списке.

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

  • ADD_LIST_ELEMENT ;
  • CONVERT_OTHER_VALUE ;
  • CLEAR_LIST ;
  • DELETE_LIST_ELEMENT ;
  • GET_LIST_ELEMENT_COUNT ;
  • GET_LIST_ELEMENT_LABEL ;
  • GET_LIST_ELEMENT_VALUE ;
  • POPULATE_LIST ;
  • RETRIEVE_LIST.

Для ответа на события интерфейса, являющиеся следствием манипулирования операторами элемента списка, в Oracle Forms существуют следующие триггеры:

  • When-List-Activated – этот триггер позволяет вам инициировать какое-либо действие всякий раз, когда элемент списка становится текущим.
  • When-List-Changed – этот триггер позволяет вам инициировать какое-либо действие всякий раз, как вы выбираете какой-либо элемент из списка.

Теперь перейдем к рассмотрению примера пошагового создания различных типов элемента списка. Чтобы создать элемент списка:

  1. Откройте созданный нами ранее модуль ABOUT.fmb.
  2. В редакторе разметки выберите на панели инструментов кнопку с изображением элемента List item, после чего ваш курсор примет вид крестика - теперь он предназначен для выделения региона, на котором будет создан, то есть для вычерчивания элемента на области разметки List Item:
    • List Item1: присвойте свойству " Метка " этого элемента - "Popup_list", "Стиль списка" - Всплывающий список (popup list).
    • List Item2: присвойте свойству " Метка " этого элемента - "Tlist Item", "Стиль списка" - Текстовый список (TList).
    • List Item3: присвойте свойству " Метка " этого элемента - "Combo_list", "Стиль списка" - Комбинированный список (combo box).

Теперь этап создания разделим на три части, рассматривая каждый стиль списка отдельно, а также с различным формированием данных и значений.

  1. Для элемента "Popup_list"
    • Перейдите в палитру свойств этого элемента и выберите свойство "Элементов в списке".
    • В появившемся окне List Elements введите в первую строку слово "Куртка" и присвойте этому полю значение в List Value – "Красная", теперь перейдите ко второму полю и создайте второй элемент списка – "Штаны" со значением "Черные".
  2. Для элемента "Tlist Item"
    • Создайте кнопку Button, измените значение свойства " Метка " на "Tlist Item".
    • Перейдите в Навигатор и создайте триггер для этой кнопки – WHEN_BUTTON_PRESSED:
      /*WHEN_BUTTON_PRESSED*/
      declare
        cursor C1 is
        select * from ABOUT;
        v_param C1%rowtype;
        n number;
      begin
        select count (1) into n from about;
        open C1;
      for i in 1..n loop
        fetch C1 into v_param;
        ADD_LIST_ELEMENT ('LI1', i, v_param.Name, v_param.FName);
      end loop;
      end;
    • Скомпилируйте триггер.
  3. Для элемента "Combo_list"
    • Создайте кнопку Button, измените значение свойства " Метка " на "Combo_list".
    • Перейдите в навигатор и создайте триггер для этой кнопки – WHEN_BUTTON_PRESSED:
      /*WHEN_BUTTON_PRESSED*/
      POPULATE_LIST ("COMBO_LIST", "ABOUT_GROUP");
    • Скомпилируйте триггер.

Теперь проверим, как работают наши примеры.

  1. Запустите форму.
  2. Нажмите на первый созданный нами элемент списка – "Popup_list". В результате появится всплывающий список, где будут указаны данные, которые мы определили во время проектирования. Остальные два списка у нас пока остаются пустыми.
  3. Теперь перейдем ко второму элементу списка – "Tlist Item". Для формирования этого списка была использована процедура ADD_LIST_ELEMENT, которая добавляет одну строку в элемент списка; ниже приведен ее синтаксис:
    ADD_LIST_ELEMENT (ITEM_NAME IN VARCHAR2, ITEM_INDEX IN NUMBER,
    LABEL_STR IN VARCHAR2, VALUE_STR IN VARCHAR2);

В нашей программе: ADD_LIST_ELEMENT ('Tlist_Item', i, v_param. Name, v_param.FName); теперь, для большего понимания синтаксиса и подставляемых нами значений на входе выполнения программы, рассмотрим параметры этой процедуры обобщенно.

  • ITEM_NAME ('TLIST_ITEM') – этот параметр принимает имя вашего элемента списка, либо его ID.
  • ITEM_INDEX (i) – индекс элемента списка, указывает на порядковый номер элемента в списке. В примере этот параметр принимает значения счетчика цикла, то есть после каждого прохождения цикла индекс элемента в списке равен: i=i+1. Поэтому, если у нас цикл будет работать в диапазоне от 1 до 4, то индексы добавленных элементов будут 1, 2, 3, 4.
  • LABEL_STR (v_param.Name) – этот параметр принимает данные типа varchar2, которые будут видны после формирования списка, то есть отображает те данные, которые мы непосредственно будем видеть. V_PARAM.NAME – это переменная типа %ROWTYPE, данные из которой мы выбираем для заполнения элемента списка из столбца NAME.
  • VALUE_STR (v_param.FName) – этот параметр принимает значение типа varchar2, которое мы связываем с предыдущим параметром. V_PARAM.FNAME – это переменная типа %ROWTYPE, данные из которой мы выбираем для заполнения элемента списка значениями из столбца FNAME. Вы также можете присвоить этому параметру значение NULL, то есть к элементу списка с названием, к примеру, Sergey добавится значение FNAME – отчество.

Теперь нажмите кнопку Tlist Item для заполнения элемента списка.

И последний рассматриваемый элемент списка"COMBO_LIST". Для формирования этого списка была использована процедура POPULATE_LIST, которая формирует элемент списка с помощью группы записей ; ниже приведен ее синтаксис:

POPULATE_LIST (ITEM_NAME IN VARCHAR2, RG_NAME IN VARCHAR2);

Параметры

  • ITEM_NAME – имя элемента списка, для которого мы исполняем запрос группы записей.
  • RG_NAME – имя Группы записей, которая формирует элемент списка. Эта группа должна быть создана программно.

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

Для заполнения COMBO_LIST

  • Нажмите кнопку "Создать запросную группу" для создания группы "about_group".
  • После получения сообщения "Group create succesfull" нажмите кнопку "COMBO_LIST". Теперь элемент списка "COMBO_LIST" заполнен данными из группы, в чем вы можете убедиться, щелкнув по нему.

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

Создание "снимка"

Под "снимком" здесь имеется в виду извлечение и немедленное сохранение содержимого списка. Эта процедура поможет вам не только извлекать и сохранять содержимое списков, но и манипулировать восстановлением списков со старым содержимым, динамически делать подмену.

RETREIVE_LIST – процедура создания так называемого "снимка".

Синтаксис:

RETRIEVE_LIST (ITEM_NAME IN VARCHAR2, RECGRP_ID IN
FORMS4C.RECORDGROUP);

Параметры:

  • ITEM_NAME – этот параметр принимает имя списка, из которого мы собираемся извлекать содержимое;
  • RECGRP_ID – этот параметр принимает имя группы записей, в которую мы будем добавлять содержимое.

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

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

/*WHEN_BUTTON_PRESSED*/
  DECLARE
      group_id RecordGroup;
      query_ok number;
  BEGIN
      group_id := Create_Group_From_Query('snapshot_group','SELECT NAME, FNAME FROM ABOUT');
      query_ok:=Populate_Group('snapshot_group');
  Retrieve_List ('COMBO_LIST', 'snapshot_group');
  Populate_List('TLIST_ITEM','snapshot_group');
  END;

Теперь давайте подробно рассмотрим, как это все будет происходить:

  1. После запуска формы нажмите указанные кнопки в заданной последовательности: "Создать запросную группу"->"COMBO LIST"->"Снимок".
  2. По нажатии первой кнопки у нас создается запросная группа, на основе которой мы будем формировать элемент списка COMBO LIST.
  3. Кнопка COMBO LIST формирует одноименный список на основе запросной группы, заполняя его данными из нее.
  4. Кнопка "снимок": при выполнении триггера этой кнопки вначале создается "snapshot_group" – это запросная группа, в которую мы будем "сливать" содержимое списка COMBO LIST. Далее на основе этой группы мы формируем список List Item, причем данные List Item должны полностью соответствовать данным COMBO LIST.
< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Жанбек Сарсенов
Жанбек Сарсенов
Россия, Москва, Московский Государственный Университет имени Ломоносова М.В., 2002