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

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


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

В этой статье мы рассмотрим примеры создания списков значений - LOV, а в следующей рассылке мы сразу же перейдем к рассмотрению Групп записей - Record Group, а также для освежения памяти я покажу как делать LOV из функции, а не таблицы. 

Создание списков значений LOV (List Of VALUES)

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

           

 

 

 

LOV (List Of Valuesсписок значений) – это списки значений представляют данные, содержащиеся в именованном объекте, и предназначены для выбора возможных значений (данных) из некоторого поля. LOV выводит на дисплей диалоговое окно с возможными данными на основе запроса или групп записей (Record Group). Список значений LOV можно задать двумя способами:

·         Вручную

·         С помощью LOV Wizard

В LOV список возможных значений может определяться не только одним столбцом данных, но и несколькими столбцами, что очень удобно и часто используется в моделях типа – “Главный-подчиненый (Master-Detail)”, а также позволяет работать с уже с сгруппированными данными и предварительно отсортированными данными. Также списки позволяют оперативно и быстро вводить данные, т.к. свойства автоуменьшения и поиска по LOV позволяют пользователям находить конкретные значения, для этого вам достаточно ввести хотя бы один символ искомого значения, по умолчание поле поиска содержит символ “%”, что означает – вывести все элемнты, соответсвующие запросу LOV.

Основные свойства LOV в Таблице Свойств:

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

1.      Функциональные (Functional) 

·                                                                                                                                                                                                                                           Record Groupздесь вы указываете имя Record Group (группы записей), с которой будет работать ваш LOV. При выборе значения этого, если у вас больше одной Record Group, поле значения будет иметь вид выпадающего списка.

·       Column Mapping Properties – при выборе этого свойства запускается окно LOV Column Mapping, в котором вы можете задать такие свойства как Column Title (синоним столбца), Column Names (имена отображаемых столбцов), Return item (возвращаемый элемент), Display Width (указать ширину столбца). Для выбора значения поля Return item нажмите кнопку “Browse”, после чего появится окно с возможными вариантами.

·       Фильтровать перед отображением – значения этого свойства отвечает за вывод диалога критериев запроса перед выводом LOV, где “Yes” означает, что диалог с критерием запроса будет выведен до списка возможных значений. После того как вы выбрали критерий запроса нажмите кнопку “Найти”.

·       Automatic Display (автоматическое отображение) – имеет всего два значения “Yes” и “No”, отвечающих за автоматическое отображение значений LOV на дисплее, то есть если вы установите значение этого свойства в “Yes”, то при навигации к элементу, к которому он подсоединен будет автоматически отображаться окно  LOV.

·       Automatic Refresh (автоматическое обновление) – имеет два значения “Yes” и “No”, отвечающих за автоматическое обновления дисплея LOV – “Yes”, означает применить автоматическое обновление – выполнить запрос при заполнении LOV.

·       Automatic Select (автоматический выбор) – имеет два значения “Yes” и “No”, где “Yes” говорит о том, что при сокращении элементов в LOV до одного то это значение автоматически выберится в  поле.

·       Automatic Skip (автоматический пропуск) – в этом поле вы указываете, следует ли перемещать курсор на следующий элемент при заполнении последнего символа в текущем элементе.

·       Automatic Position (автоматическая позиция) – имеет два значения “Yes” и “No”, где “Yes” означает, что LOV будет автоматически распологаться возле того поля из которого был вызван.

·       Automatic Column Width (автоматическая ширина столбца) – автоматическое определение ширины колонок. Это свойство в режиме “Yes” дает возможность Forms самому определить ширину колонки, что очень удобно, т.к. дает возможность не заполнять эти параметры вручную.

2.      Физические (Physical)  

·       X Positionуказание координаты размещения LOV по оси Ox

·       Y Position - указание координаты размещения LOV по оси Oу

·       Heightв этом поле указывается высота диалогового окна LOV

·       Widthв этом поле указывается ширина диалогового окна LOV

Вот в принципе и все основные свойства для работы LOV, которые вам необходимо знать. 

Приступим к созданию LOV:

Создавать LOV будем с помощью LOV Wizard в 5 шагов:

1.      Специфицируем отображаемые LOV значения: когда вы создаете новый LOV, вы создаете SQL запрос, который возвращает данные для отображения списка значений LOV. Этот  запрос создает новую рабочую группу автоматически, если вы создаете его с помощью LOV Wizard. Если же вы при создании LOV выбираете опцию Build a new LOV manually, то вы должны помнить, что значения LOV происходят от внутренней структуры данных, называемой Record Group (группой записей).  Поэтому когда вы создаете LOV, вы  связываете его с именной группой записей (Record Group).

2.      Формат отображения LOV: в LOV элементы отображаются в виде таблицы, в этом шаге вы выбираете, модифицируете названия поля (столбца), ширину, длину, кол-во отображаемых столбцов, определите поля, отображаемые в LOV, и укажите элемент формы, в который будет возвращено значение.

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

4.      Переименование: при создании LOV мы пользовались мастером создания списков значений LOV Wizard, который при создании LOV и Record Group автоматически присваивает имя, состоящее из имени объекта и порядкового номера, поэтому я советую вам изменить имена по умолчанию, на более понятные, что придаст вашему приложению большую читабельность.

5.      Создать вызов LOV в приложении с помощью кнопки либо в ответ на любое другое событие.

Теперь выполним следующее упражнение:

1.      Откройте ранее, созданную нами форму MOBILS.fmb, которую мы делали в предыдущем упражнении. Нам необходимо создать LOV для поля Models блока Mobils.  Это делается, для того чтобы пользователь при вводе новой модели мог точно определить фирму для создаваемой модели, проверить существует ли эта фирма вообще, дабы не нарушить ссылочную целостность,  организовать корректный ввод значения, определит для пользователя формат вводимого данного. А также списком значений очень удобно пользоваться в режиме ввода запроса, т.к. вы можете легко просмотреть все возможные критерии выборки.  

2.      Для запуска LOV выберете Tools->LOV Wizard, либо выберете в Навигаторе узел LOV, затем выполните команду Create в меню Навигатора или LOV Wizard в всплывающем меню. 

3.      После запуска LOV Wizard вы увидите окно (Рис. 10):

Рисунок 10 – LOV Wizard

Здесь вам предлагается два способа построения запроса:

·         Build SQL Query – построить запрос с помощью мастера запросов. После нажатия этой кнопки запущено окно, где вам будут предложены следующие возможности: выбрать одну или более таблиц, связать таблицы (если вы выбрали более одной таблицы) и выбрать нужные вам столбцы, пометив нужный вам столбец галочкой.

·         Import SQL Query – предлагает вам выбрать из вашей файловой системы, ранее созданный вами запрос.

·         SQL Query Statement – это поле “прямого ввода”, в этом поле вы можете сами написать нужный вам запрос. При этом в конце запроса не нужно ставить знак “;” (точка с запятой), т.к. Forms сразу же выдаст вам сообщение об ошибке.

Кнопки, расположенные под редактором SQL Query Statement выполняют следующие действия:

·         Connect – соединяет пользователя с БД, запуская окно соединения.

·         Check Syntax – проверяет введенный вами запрос на ошибки.

 В нашем случае в поле SQL Query Statement, введем запрос:

Select MOBILS.MODEL, Firm.Firm_Name From MOBILS m, Firm f where

f.Firm_ID=m.Firm_Fk  

Затем, для подтверждения нажмите кнопку Apply, после чего Forms сделает неявную проверку Check Syntax, введенного вами SQL предложения и если проверка завершится успешно Forms, пока невидимо для вас создаст Группу записей (Record Group), на основе вашего запроса (SQL Query Statement).  

4.      Затем появится следующее окно, в котором будут отображены выбранные вами столбцы, нажмите кнопку с иконкой “>>”, чтобы переместить сразу все столбцы и нажмите кнопку Next.

5.      В следующем окне – окно форматирования LOV Display, вам будет предложено задать размеры (Width) колонок в дисплее LOV, а также возвращаемое значение Return Value Column, определяющее текстовое поле формы, с которым будет связан  наш LOV, для определения этого значения будет выведено окошко, как (Рис. 11):

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

Выберите в окне поле, которое хотите связать и нажмите кнопку Look up return item, и в появившемся окне выберете:

для поля

o       Models - выберем элемент MOBILS.MODEL

o       Firm - элемент FIRM.Firm_Name

После этого, при вводе курсора в поле Model, будет открываться список значений с данными из элементов MOBILS.MODEL и FIRM.Firm_Name.

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

6.  Создайте в блоке MOBILS кнопку, с помощью Навигатора или нажав соответствующую кнопку на панели инструментов Редактора Разметки (Layout Editor).

7. Создав кнопку, перейдите в Навигатор, выделите созданную вами кнопку и нажмите правую кнопку мыши. Во всплывающем меню выберите пункт Smart Triggers (специальные триггеры и наиболее часто используемые)-> WHEN_BUTTON_PRESSED.

8. В запустившемся PL/SQL редакторе наберите и скомпилируйте следующий код:

GO_ITEM (‘MOBILS.Model’);                //– перейти к элементу

LIST_VALUES;                                             //-вызвать список значений

После этого нажмите кнопку Compile PL/SQL Code для компилирования вашего триггера. И выполните команду Run Form.

Результат будет следующим: после нажатия кнопки, курсор перейдет в элемент MOBILS.Model и вызовет LOV.

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

В объектном Навигаторе выделите Блок Mobils, затем вызовите всплывающий список, правым щелчком мыши и выберете пункт Smart Triggers -> WHEN_NEW_ITEM_INSTANCE. Этот триггер срабатывает, всякий раз как курсор будет входит в элемент.

Теперь в редакторе PL/SQL напишите следующий обработчик:

Declare

     a varchar2(20):=:system.current_item;

     orient varchar2(20):=:system.block_status;

begin

 IF ( orient = 'NEW' or orient = 'INSERT' )

 THEN  

select a into :client.C_name from dual;

 GO_ITEM ( 'Client.'||a) ;

 LIST_VALUES;

 END IF;

END;

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

 

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


В избранное