Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4.pdf
Скачиваний:
502
Добавлен:
17.02.2016
Размер:
29.74 Mб
Скачать

Считывание данных с помощью Logical Databases

173

 

 

 

 

 

таблица customers принадлежит к первому уровню иерархии (и изображается в верхней части экрана), таблица bookings — ко второму уровню (это показано уходящей вниз ветвью).

Смысл использования древовидной структуры поясняется в разделе "Порядок выполнения событий get".

Что применять: команду select или Logical Databases

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

• Вторая программа генерации отчета использует два события get, а не вложенные циклы select.

• В первой программе отношение внешнего ключа между таблицами customers и bookings задается в условиях предложения where, что отсутствует во второй программе, где это отношение моделируется древовидной структурой Logical Database. Данная структура определяет также порядок обработки событий get.

• В первой программе критерии выборки (дата авиарейса и дата заказа) задаются в предложении where. Во второй программе эти критерии задаются динамически конечным пользователем — они могут быть выбраны без изменения исходного текста.

Каждый отчет может иметь только одну Logical Database, однако одна Logical Database может использоваться несколькими отчетами, и это одна из главных причин их применения. Logical Database упрощает и инкапсулирует извлечение данных; не нужно описывать технические детали, такие как предложения where и команды select, когда для создания отчета применяется логическая база данных. Все модификации и улучшения, сделанные в рамках логической базы данных, будут сразу отражаться на характеристиках всех отчетов, использующих ее.

Преимущества использования Logical Database показаны ниже, в разделе "Преимущества Logical Databases".

Задание составных критериев выборки

Критерии выборки во втором примере программы-отчета демонстрируют два важных случая:

Отдельные величины (например, дата заказа = 01/01/1999)

Нижние границы (например, дата полета > 05/01/1999)

Кроме них, конечный пользователь может задавать другие критерии выборки:

Интервалы (например, имена между А и М)

Базисные значения (например, имена, начинающиеся с буквы S)

Отрицание всех указанных выше условий

Комбинированные условия выборки (например, телефонные номера от 111-000-0000 до 666-999-9999, но не равные 333-444-2222)

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

В главе 18 будут рассмотрены варианты (Variants), позволяющие задавать для отчета предварительно определенные наборы критериев выборки, а также определять специфичные для отчета критерии, которые будут появляться на экране выбора отчета ниже стандартных

критериев, специфичных для базы данных. Эта технология программирования описывается в главе 16.

Порядок обработки событий get

Второй пример предыдущего раздела показывает, что порядок обработки различных событий get полностью определяется древовидной иерархией, заданной в Logical Database. В принципе структура дерева отражает отношение внешнего ключа между соответствующими таблицами. Структура логичес-

7 Зак. 65

174

Глава15

 

 

 

кой базы предыдущего примера включает как минимум отношение родитель — потомок между таблицами customers и bookings.

Важно понимать, что отчет, создаваемый на основе Logical Database, не предусматривает последовательной обработки во время выполнения. Вместо этого порядок работы определяется структурой логической базы. Все операторы после конкретного оператора get и перед следующим событием принадлежат данному событию get. Эти операторы выполняются всякий раз, когда внутренние процедуры логической базы считывают элемент соответствующей таблицы. Таким образом, порядок расположения событий get в исходном тексте программы создания отчета не имеет значения. События get могут интерпретироваться как отдельные модули, вызываемые системой.

Работа с несколькими таблицами

Часто в отчете применяется несколько таблиц. Предположим, что в отчете обрабатываются четыре таблицы ztabl-ztab4, связанные следующим образом:

ztab1 — контрольная таблица для ztab2

ztab2 — контрольная таблица для ztab3 и ztab4

При использовании операторов select отношения внешних ключей выражаются в форме различных уровней вложения:

Древовидная структура Logical Database содержит готовую к использованию модель отношения между таблицами (рис. 15.7).

Рис. 15.7

Структура сложной Logical Database

Считывание донных с помощью Logical Databases

 

175

Следующий исходный текст программы, использующей Logical Database, реализует тот же самый отчет:

Этот отчет выводит на экран тот же список, что и предыдущий отчет, использующий вложенные операторы select. Обратите внимание, что событие get late обрабатывается только после того, как будут обработаны все элементы таблиц, находящиеся на более низком уровне иерархии по отношению к ztab2. Элементы таблицы ztab1 считываются при выполнении отчета, несмотря на то что соответствующее событие get отсутствует. Вообще говоря, таблица со структурой, описанной в Logical Database, будет считываться в следующих случаях:

1.Таблица соответствует событию get или get late в отчете.

2.Таблица является предшественницей одной из таблиц, определяемых пунктом 1.

Впредыдущем примере таблицы ztab2, ztab3 и ztab4 относятся к первому случаю, а таблица ztab1 — ко втором}'. В соответствии с этими правилами поддерево не обрабатывается (т.е. элементы таблицы не считываются из базы), если в отчете не встречается соответствующее событие get.

Древовидная структура Logical Database является свободно определяемым логическим представлением нескольких таблиц базы. Хотя в большинстве случаев отношение родитель — потомок отражает отношение внешнего ключа, иногда таблицы связаны через дополнитель-

ную подпрограмму Logical Database, и эта связь устанавливается во время выполнения отчета.

Использованиевнешнихсоединений

Logical Databases дает возможность установить внешнее соединение различных таблиц базы, даже если такая процедура и не поддерживается используемой на нижнем уровне СУБД. Обратимся вновь к первому примеру этой главы и предположим, что необходимо получить отчет о заказах клиентов на рейсы, которые состоятся позднее 06/30/1999. Допустим также, что нужно письменно уведомить клиентов, которые не заказывали билеты в этот период, т.е. понадобится узнать их фамилии. Если такой отчет строится на основе логической базы, то нет необходимости изменять исходный текст программы. Можно просто ввести новую нижнюю границу 06/30/1999 для даты полета на экране выбора параметров и сразу же получить требуемый список.

Очевидно, что точно такой же список можно получить и с помощью вложенных операторов select с новыми критериями выборки в предложениях where. Однако, используя представления, определенные в Dictionary, можно получить только внутреннее соединение таблиц customers и bookings. Например, там не окажется фамилии клиента Edison, который не заказывал билет в тот период времени.

Построениесобственнойлогическойбазы

Разработчик может создать собственную логическую базу, используя Object Browser в Development Workbench. Как правило, необходимо определить структуры, соответствующие критерию выборки, и процедуры доступа к базе данных. В дальнейшем разработанную Logical Database можно будет применять в любом отчете.

Подробная информация о создании и дальнейшем сопровождении логической базы содержится в руководстве пользователя АВАР/4 (User's Guide). Доступ к тексту руководства

можно получить на начальном экране Development Workbench, если указать элементы меню: Help > Extended Help.