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

160

 

Глава 14

 

 

 

 

Составные объекты данных АВАР/4 строятся из записей и внутренних таблиц. Например, в главе 4 описывалось применение вложенных внутренних таблиц, каждая строка которых содержит поля или другие внутренние таблицы. Однако до сих пор речь шла только о внутренних таблицах, которые использовались как временные объекты и "время жизни" которых исчислялось временем выполнения той программы, где они были определены.

В системе R/3 оперативные данные приложений хранятся в таблицах базы данных. В предыдущих главах было показано, как считывать или изменять эти данные, используя операторы Open SQL типа select или insert. В отличие от внутренних таблиц таблицы базы имеют "плоскую" структуру, т.е. элементы таблицы состоят только из полей и не содержат других таблиц. Содержимое объектов локальных программ, таких как записи или внутренние таблицы, допускается сохранять в таблицах реляционной базы данных. Однако в этом случае такой объект должен быть преобразован в плоскую структуру.

Применение команд export и import обеспечивает запись этих составных объектов в базу данных и чтение из нее с помощью одной операции. Операторы export и import дают возможность объединять несколько составных объектов разных типов, хранить и извлекать их как один объект. Они позволяют импортировать составные объекты с различным количеством вложенных объектов без излишних преобразований.

Благодаря технологии export и import осуществляется экспорт составных объектов как во временные объекты, сохраняющиеся в рабочих программах (хранилище носит название АВАР/4 Memory), так и в постоянные таблицы базы данных. Особенно эффективно использование АВАР/4 Memory при передаче большого количества составных объектов в вызываемую программу (при этом может быть несколько уровней вызова). При создании постоянных составных объектов с помощью команды export (второй способ сохранения таблиц) не нужно заботиться о преобразовании вложенных таблиц в плоскую структуру.

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

Временное хранение

Допустим, требуется передать набор локальных объектов данных в программу для временного хранения. Для этого используется оператор export с дополнением to memory, после которого указывается идентификатор id. Рассмотрим тот же пример программы для туристического агентства. Приведенные ниже тексты содержат две внутренние таблицы — all_customers и all_bookings, которые с помощью одного оператора export передаются за один шаг как единый кластер во временную рабочую область основной памяти, заданную посредством идентификатора CUSTBOOK (идентификатор кластера, содержащего обе внутренние таблицы).

Все таблицы, содержащиеся в кластере CUSTBOOK, можно извлечь с помощью одного оператора import:

В данном примере внутренние таблицы all_customers и all_bookings, хранящиеся в кластере памяти CUSTBOOK, копируются во внутренние таблицы программы с такими же именами.

Разрешается задавать любые имена объектов данных, в которые импортируется таблица из памяти. Подробные пояснения приведены • разделе "Использование локальных имен

объектов памяти".

Размер идентификатора, указанного после дополнения id, не должен превышать 32 символов. Команда export всегда заново записывает содержимое рабочей области памяти, указанной с помощью идеи-

Экспорт и импорт составных объектов данных

 

161

 

 

 

 

тификатора, поэтому фактически в кластере памяти находятся части данных, которые были экспортированы последней командой export. Значение системного кода возврата sysubrc после команды import, не равное нулю, говорит о том, что по заданному идентификатору кластера памяти не содержится объекта данных. При этом на экран выводится сообщение, что не получено никаких данных.

Операторы import и export могут работать с одним кластером, содержащим любое количество разных объектов, например поля, записи, внутренние таблицы и вложенные

внутренние таблицы.

Пропуск объектов

Часто, используя оператор import, не нужно извлекать все объекты, записанные в память, некоторые из них вполне можно пропустить. Например, из того же кластера CUSTBOOK приведенной ранее программы можно считать только таблицу all_bookings без таблицы all_customers:

Имена экспортируемых объектов (в примере — содержимое CUSTBOOK) и имена в операторе import (в приведенных выше текстах — all_bookings) определяют, какой объект считывается. Если имя объекта в операторе import не содержится в объекте Memory, то в этот объект ничего не будет считано. Например, используя тот же кластер CUSTBOOK, можно воспользоваться следующим программным кодом:

Здесь внутренняя таблица new_customers останется пустой после считывания, поскольку таблица с таким именем не экспортировалась. Возможность применения различных имен для объектов одинаковой структуры будет рассмотрена в следующем разделе.

Несоответствие имен объектов экспортируемой и импортируемой структур приводит к ошибке в выполнении программы.

Использование локальных имен для объектов памяти

Оператор import допускает переключение имен объектов с помощью дополнения to, которое указывается после имени каждого импортируемого объекта. Например, если внутренняя таблица, в которую необходимо считать таблицу all_bookings, называется new_bookings, то она заполняется следующим образом:

В этом случае новая внутренняя таблица new_bookings, объявленная в операторе data, заполняется таблицей all_bookings, которая содержится в кластере CUSTBOOK. Таблица all_customers не извлекается.

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

Содержимое таблицы old_customers экспортируется в таблицу all_customers, а таблицы old_bookings — в all_bookings, и обе они размещаются в объекте памяти с именем CUSTBOOK.

Очистка содержимого объектов памяти

Используя команду free memory, можно освободить определенную часть памяти. Если идентификатор не указывается, то из памяти удаляется все:

И приведенном примере стирается содержимое кластера CUSTBOOK, а его имя автоматически удаляется.

Часть V

Созданиеотчетов

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

Глава 16. Интерфейс пользователя с отчетной подсистемой Report

Глава 17. Движение вглубь объекта и дополнительные возможности при работе со списками

Глава 18. Выполнение отчета

Глава15

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

Что такое Logical Databases

Что использовать: команду select или Logical Databases

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

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

Преимущества использования Logical Databases