Меню

Полная интеграция процедур базы данных SAP HANA в ABAP с помощью AMDP

ABAP Managed Database Procedures (AMDP) — новая технология встраивания собственного исходного текста базы данных в приложения на ABAP. Благодаря появлению и развитию SAP HANA разработчики на ABAP теперь могут использовать функции базы данных, превышающие возможности Open SQL. AMDP доступны в SAP NetWeaver 7.40 с пакетом поддержки 5 , но для применения некоторых описанных здесь функций требуются следующие пакеты поддержки.

Ключевое понятие

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

Большинство разработчиков ABAP столкнулись с необходимостью иметь доступ к базе данных, используя родной язык запросов, реализуемый системой управления базой данных. Например, для того, чтобы воспользоваться функциями управления базой данных, которые не входят в объем Open SQL, или оптимизировать код формируемых запросов для конкретной базы данных.

Теперь благодаря технологии ABAP Managed Database Procedures (AMDP) у них появилась возможность применять к базе данных более сложную прикладную логику. В отличие от более ранних решений, здесь это можно выполнить в рамках хорошо структурированного и четкого подхода.

В этой статье AMDP рассматривается с использованием стандартной среды разработки ABAP. Здесь описано синтаксическое встраивание и взаимодействие между сервером приложений ABAP и системой управления базой данных (СУБД). Такая информация поможет разработчикам понять, почему и в каких случаях возникают те или иные синтаксические или динамические ошибки.

Мы рассмотрим устранение связанных с базой данных проблем с помощью знакомых вам инструментов ABAP 9например, отладчика ABAP и анализа динамических ошибок ABAP), а также перечислим возможности расширения и особенности интеграции в структуру Business Add-In (BAdI).

Однако сначала сравним предыдущие возможности с новой функциональностью AMDP.

Прежде и теперь

Кратко вспомним прежние возможности для прямого доступа к базе данных через ABAP.

EXEC SQL

С «доисторических» времен ABAP — или с того периода, который многие современные разработчики назовут «доисторическим» — технология EXEC SQL существовала как способ вставки блока исходного текста на языке управления базой данных в ABAP. Блок EXEC SQL представляет собой всего лишь контейнер для любого языка управления базой данных с исходным текстом внутри. Этот текст, как надеется разработчик, будет распознан и корректно выполнен соответствующей СУБД. В большей или меньшей степени игнорируемые компилятором ABAP, эти фрагменты кода переносятся через системный ландшафт вместе с кодом ABAP. Во время выполнения они отправляются в базу данных для обработки.

Этот самый базовый подход не предполагает большого удобства в отношении таких важных вещей, как синтаксические проверки или анализ динамических ошибок. Чтобы выполнить тщательную проверку синтаксиса, разработчику потребуется дополнительная среда разработки для работы с базой данных. В противном случае придется воспользоваться старым добрым методом проб и ошибок. Работа с динамическими ошибками не идет дальше поиска сообщений об ошибках SQL.

ABAP Database Connectivity (ADBC)

Технология ADBC, появившаяся как альтернатива EXEC SQL, является полностью динамическим методом. Это система на основе классов, которая позволяет повторно использовать вызываемый код доступа к базе данных и применять к нему модульное проектирование. Ошибки возвращаются в виде исключений, которые проще обработать. Обмен данными между сервером приложений ABAP (AS ABAP) и базой данных осуществляется более универсальным способом, чем в EXEC SQL, где использование переменных было ограничено плоскими структурами и элементарными полями.

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

CALL DATABASE PROCEDURE

Для компенсации недостатков EXEC SQL и ABDC, в частности, отсутствия статических проверок, команда CALL DATABASE PROCEDURE работает с исходным текстом, который контролируется не средой ABAP (AS ABAP), а непосредственно базой данных (SAP HANA). Соединение между SAP HANA и репозитарием ABAP устанавливается через прокси процедуры.

Результатом является прямое управление жизненным циклом разработки для более эффективной проверки синтаксиса. Разработчикам и администраторам приходится решать задачи синхронизации переносов такого кода в среде разработки ABAP и SAP HANA.

Можно ли улучшить этот процесс?

Да, можно. AMDP возвращается к концепции встраивания исходного текста родных команд управления базой данных в код ABAP, как и в EXEC SQL, но на этот раз со всеми неотъемлемыми удобствами ABAP: выделением синтаксиса, тщательной синтаксической проверкой, автодополнением и навигацией по исходному тексту. И что важнее всего, управление жизненным циклом разработки осуществляется AS ABAP. Как оказалось, это весьма существенно.

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

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

Посмотрим, выполняет ли AMDP эти требования.

Создание метода AMDP

В следующих разделах статьи описан жизненный цикл методов AMDP, начиная с первого примера реализации на рис. 1.

Рис. 1. Реализация метода AMDP

Этот метод не содержит ABAP-кода, но строки между METHOD и ENDMETHOD являются исходным текстом текстом на языке используемой базы данных. В отличие от EXEC SQL, оператор метода обогащен синтаксическими добавлениями для указания базы данных (в данном случае HDB, т.е. SAP HANA) и указания используемого языка базы данных (здесь SQLSCRIPT). Это база для выделения синтаксиса и выполнения подробной синтаксической проверки.

Инфраструктура AMDP подготовлена для поддержки различных платформ и языков управления базами данных. Сегодня всеобщее внимание устремлено на SAP HANA, а реализация осуществляется только на базе SAP HANA с языком базы данных SQLScript. На рис. 2 показан часть класса AMDP с определением.

Рис. 2. Определение класса AMDP

В верхней части определения класса отображается интерфейс с именем IF_AMDP_MARKER_HDB. Этот интерфейс является обязательным и помечает класс как класс, содержащий методы AMDP (для HDB). Такой класс называется классом AMDP. Он также может содержать методы ABAP. В удобном интерфейсе несложно найти все классы AMDP, находящиеся в системе.

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

Методы AMDP могут являться статическими методами или методами экземпляра класса, общедоступными (Public) или частными (Private). Решение о выборе типа метода принимается в зависимости от структуры программного обеспечения или согласно личным предпочтениям разработчика.

Перенос данных между ABAP и базой данных с помощью методов AMDP

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

Параметры

Методы AMDP могут иметь параметры EXPORTING, IMPORTING и CHANGING, но не RETURNING. Последний используется только в функциях базы данных AMDP, которые представляют собой вариант методов AMDP, описанных ниже.

Как было видно на предыдущем примере фрагмента кода (рис. 2), сигнатура метода AMDP выглядит как сигнатура метода ABAP с параметрами на основе типов данных ABAP. Несмотря на то, что тело реализовано на другом языке с другими типами системы, разработчикам не стоит беспокоиться о том, что в результате преобразования данных между языками возникнет масса ошибок. Система AMDP гарантирует корректное преобразование соответствующих типов базы данных в типы языка ABAP.

AMDP поддерживает элементарные типы ABAP и внутренние структурные типы, что упрощает обработку параметров, которая всегда была достаточно трудоемкой задачей в EXEC SQL или ADBC. Внутренние таблицы могут содержать вложенные структуры, поскольку создать аналог для глубоких структур в базе данных невозможно.

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

Единственным ограничением в отношении параметров метода AMDP является обязательный вызов по значению. Это очевидно, поскольку вызов метода AMDP означает выход из стека ABAP. Как при выполнении Remote Function Call (RFC), вызываемая сторона (в данном случае база данных) не получает доступа к данным ABAP.

Использование объектов ABAP-словаря

В теле метода AMDP разработчикам может потребоваться обратиться к другим объектам базы данных: таблицам и объектам в схеме базы данных (далее — схема SAPSID), а также к таблицам в других схемах, не относящихся к текущему AS ABAP.

Управление большей частью объектов базы данных в схеме SAPSID осуществляет ABAP-словарь. Таким образом, инфраструктура AMDP может проверять их наличие, табличные структуры и версии. Она позволяет выявить возможные синтаксические ошибки на очень ранних этапах проверки для любого типа базы данных. Вы можете воспользоваться преимуществами, которые дает такая информация, и получить максимально эффективные сообщения синтаксической проверки и средства навигации по исходному тексту. Таким образом, метод AMDP содержит описание USING, которое перечисляет таблицы, ракурсы или объекты базы данных, используемые в методе и хранящиеся в схеме SAPSID (рис. 3).

Рис. 3. Объявление таблиц словаря данных со ссылкой в условии USING

Дважды щелкните по любому объекту в списке USING для перехода к определению данных (например, транзакция SE11).

Объекты базы данных для схем, отличных от SAPSID, ABAP-словарем не контролируются, поэтому AMDP приходится полагаться на то, что они существуют и являются корректными. Указывать их в условии USING не обязательно, но обращаться к ним необходимо посредством префикса схемы.

Наконец, методы AMDP могут вызывать другие методы AMDP (рис. 4). Поскольку сами методы AMDP являются управляемыми ABAP объектами, они должны быть указаны в условии USING с полным именем.

Рис. 4. Объявление другого метода AMDP, вызванного в теле метода AMDP в условии USING

Синтаксическая проверка

Оформите подписку sappro и получите полный доступ к материалам SAPPRO

У вас уже есть подписка?

Войти