Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СУБД Oracle для разработчиков. Forms and Reports 6i-10g


Здравстуйте уважаемые подписчики!

В этой статье и последующих мы с вами рассмотрим наиболее важные элементы Forms.

Элементы блоков (Items)

Сергеенко С.В.

Элементы - это объекты интерфейса, которые выводят информацию для операторов и позволяют им взаимодействовать с прикладной программой. Oracle Forms поддерживает девять типов элементов интерфейса, которые вы можете использовать для построения интерфейса прикладной программы.

 

 

Таблица 1: Элементы Oracle Forms 6i

 

Button

 

(кнопка)

 

Прямоугольник с текстовой меткой или графической иконкой внутри.

 

Chart item

 

(элемент диаграмма)

 

Прямоугольник с окантовкой любого размера, выводящий диаграмму или иное изображение, генерируемый Oracle Graphics. Операторы не могут перемещаться к элементам диаграмм или манипулировать ими.

 

Check box

 

(переключатель)

 

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

 

Display item

 

(неизменяемый текст)

 

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

 

Image item

 

(элемент изображение)

 

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

 

List item

 

(элемент список)

 

Список вариантов, выводимый или как всплывающий список (иногда называемый ниспадающим списком), или как t-список (иногда называемый списочной рамкой), или как combo-рамка.

 

Radio group

 

(радио-группа)

 

Группа радио-кнопок, одна из которых всегда выбрана.

 

Text item

 

(элемент текст)

 

Одно- или многострочная текстовая рамка, поддерживающая множество типов данных, масок формата, а также возможности редактирования.

 

OLE container

 

(OLE-контейнер)

 

Область, которая хранит и выводит объект OLE, создающийся прикладной программой OLE-сервера.

 

ActiveX Control

 

 

Пользовательское средство управления, которое упрощает построение и усовершенствование пользовательских интерфейсов.

 

Bean Area

 

 

Hierarchical Tree

 

(Иерархическое дерево)

 

Элемент – иерархическое дерево. Элемнты дерева можно создавать динамически. Элементы дерева могут быть любой вложенности родитель-потомок.

 

Tab Canvas

 

(Страница вкладки)

 

Создает страницу с закладками. Каждая вкладка может иметь имя.

 

Stacked Canvas

 

(Стековая вид-картинка)

 

 

Элемент списка (List Item)

 

Создание, определение и применение

 

 

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

 

 

·      Всплывающий список - элемент списка стиля всплывающий список первоначально выглядит как одно поле (подобно полю элемента текста). Когда оператор выбирает иконку списка, появляется список доступных вариантов.

 

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

 

·      Комбинированый список - элемент списка стиля комбинированная рамка объединяет характеристики элементов текста и списка. В отличие от элементов списка стиля всплывающего или текстового списка, элемент списка стиля комбинированная рамка будет как выводить фиксированные значения, так и принимать одно вводимое оператором значение.

 

 

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

 

 

·Включен – этот параметр отвечает за состояние элемента списка, по умолчанию имеет значение “Да”, то есть включен.

 

·Элементов в списке – при выборе этого свойства запускается окно List Elements, в котором, в поле  List Elements вводятся данные которые будут отображены в списке, а в поле List Item Value – значения этих днанных.

 

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

1.      Укажите, что элемент списка будет отвергать Другие значения как Не Разрешенные.

 

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

 

·Класс выполнения – в этом параметре указыется класс для выполнения 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 :

 

1.      List Item1 – присвойте свойствам “Метка” этого элемента - “Popup_list”,  “Стиль списка” - Всплывающий список (popup list)

2.      List Item2 - присвойте свойству “Метка” этого элемента - “Tlist Item”,  “Стиль списка” -  Текстовый список (TList)

3.      List Item3 - присвойте свойству “Метка” этого элемента - “Combo_list”,  “Стиль списка” - Комбинированный список (combo box)

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

 

Для элемента “Popup_list”:

 

·          Перейдите в палитру свойств этого элемента и выберите свойство “Элементов в списке”.

 

·          В появившемся окне List Elements введите в первую строку слово “Куртка” и присвойте этому полю значение в List Value - “Красная”, теперь перейдите ко второму полю и создайте второй элемент списка - “Штаны” со значением - “Черные”.

 

Для элемента “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');

 

·       Скомпилируйте триггер.

 

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

 

· Запустите форму

 

· Нажмите на первый, созданный нами элемент списка - “Popup_list”. В результа появится всплывающий список, в котором будут указаны данные, которые мы определили во проектирования. Остальные два списка у нас пока остаются пустыми.

 

· Теперь перейдем ко второму элементу списка -  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 – имя Группы записей, которая формирует элемент списка. Причем эта группа должна быть создана программно.

 

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

 

 5.Для заполнения 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”.

 

Удаление составляющих списка

 

 

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

 

CLEAR_LIST – эта процедура служит для полной отчистки элемента списка от его содержимого. Процедура принимает один единственный параметр – это имя очищаемого списка:

 

CLEAR_LIST  (ITEM_NAME IN VARCHAR2);

 

Пример: CLEAR_LIST ('COMBO_LIST')

 

DELETE_LIST_ELEMENT - эта процедура служит для удаления определенного элемента списка, потому как мы указываем конкретный номер элемента, который мы собираемся удалить:

 

DELETE_LIST_ELEMENT (ITEM_NAME IN VARCHAR2, ITEM_INDEX IN NUMBER);

 

Пример: DELETE_LIST_ELEMENT ('COMBO_LIST', 2); - удалить второй элемент из списка.

 

Ниже приведен пример с использованием процедуры  DELETE_LIST_ELEMENT , который удаляет из списка все элементы в которых встречается значение “Sergey”:

 

declare

 

         n number;

 

begin

 

    n:=GET_LIST_ELEMENT_COUNT('COMBO_LIST');

 

for i in 1..n loop

 

    if GET_LIST_ELEMENT_VALUE('COMBO_LIST',i)='Sergey'

 

    then

 

       DELETE_LIST_ELEMENT ('COMBO_LIST', i);

 

 end loop;

 

end;

 

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

 

В вышен приведенном примере были задействоны также и две незнакомые нам функции:

 

GET_LIST_ELEMENT_COUNT эта функция возвращает кол-во строк в элементе списка:

 

GET_LIST_ELEMENT_COUNT (ITEM_NAME IN VARCHAR2) RETURN VARCHAR2;

 

Пример:

 

declare

 

LIST_COUNT NUMBER;

 

begin

 

LIST_COUNT:=GET_LIST_ELEMENT_COUNT('COMBO_LIST');

 

... // какоето действие

 

end;

 

GET_LIST_ELEMENT_VALUE -  эта функция возвращает значение элемента в списке по заданному индексу:

 

GET_LIST_ELEMENT_VALUE (ITEM_NAME IN VARCHAR2, ITEM_INDEX IN NUMBER) RETURN VARCHAR2;

 

Пример:

 

declare

 

str_value varchar2(20);

 

begin

 

str_value:=GET_LIST_ELEMENT_VALUE('COMBO_LIST',i);

 

... // какоето действие

 

end;

 

Примеч. Не удаляйте составляющий и не очищайте весь список, если свойство Other Values этого элемента списка установлено на False и запрос открыт. Это может лишить Oracle Forms возможности выводить уже извлеченные записи, т.к. Oracle Forms будет пытаться вывести ранее извлеченные значения, но не сможет, потому что составляющий удален. Поэтому перед удалением  составляющего проверьте, нет ли открытых запросов, и тогда для закрытия любых запросов используйте встроенную подпрограмму ABORT_QUERY.

 

 

По всем вопросам, замечаниям и предложениям обращаться на sqaimes@mail.ru


В избранное