AMDP Функции

Начиная с релиза ABAP 7.50 у нас появилась возможность создания не только AMDP процедур, но и AMDP функций. В зависимости от типа AMDP функции они могут быть вызваны:

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

Далее рассмотрим все варианты использования AMDP функций.

В отличие от AMDP процедур, AMDP функция реализуется как AMDP метод, но с указанием дополнения BY DATABASE FUNCTION:

Существует следующие виды AMDP функций:

  • AMDP табличная функция — в контексте HANA это функция БД, которая в качестве результата возвращает табличный результат. В SQLScript табличные функции могут быть использованы как источник данных вместо таблиц или ракурсов.
    • AMDP табличная функция для AMDP методов.
    • AMDP табличная функция для табличной функции ABAP CDS.
  • AMDP скалярная функция — функция в БД, которая в качестве результата возвращает результат элементарного типа.

Несмотря на возможность вызова AMDP функций из объектов HANA Native разработки, таких как хранимые процедуры или calculation view, SAP не рекомендует так делать.

Скалярные AMDP функции

Особенности:

  • Должна иметь RETURNING параметр элементарного типа.
  • IMPORING параметры должны быть элементарного типа.
  • Не допускается объявление исключений в определении через дополнение RAISING.
  • Допускается использование дополнения DETERMINISTIC после OPTIONS — чтобы обеспечить кеширование результата функции в рамках запроса, если входные параметры вызова функции будут идентичными. Более подробно.

Допускается вызов скалярных AMDP функций непосредственно из ABAP, в т.ч. как функциональных методов.

Рассмотрим простой пример:

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

Обратите внимание на опцию DETERMINISTIC, если вы её используете, вы не можете получить мандант из функции SESSION_CONTEXT( ‘CLIENT’ ).

Как уже было упомянуто ранее, такие функции могут быть вызваны из ABAP кода:

Табличные AMDP функции

Табличная функция для AMDP методов

Особенности:

  • Функция должна иметь RETURNING параметр табличного типа, все компоненты структуры которого должны иметь элементарный тип.
  • Не допускается использование CHANGING или EXPORTING параметров.
  • Не допускается объявление исключений в определении через дополнение RAISING.
  • Обязательно должно быть указание READ-ONLY.
  • Нельзя вызвать непосредственно из ABAP кода.

Пример:

Обратите внимание на использование ключевого слова RETURN для передачи результата функции.

В примере мы вновь использовали ранее определённую скалярную функцию для формирования табличного результата новой табличной функции.

При вызове из ABAP на этапе компиляции не будет предупреждения, но в момент запуска возникнет дамп — CALL_METHOD_AMDP_FUNC_ILLEGAL:

Табличная функция для ABAP CDS Table Functions

В ABAP CDS можно объявить так называемую табличную функцию, основное предназначение которой — предоставить некоторый набор данных сформированный внутри AMDP функции. Сделан такой функционал прежде всего для возможностей использования HANA Native функционала, который пока по той или иной причине не доступен в ABAP CDS.

Особенности:

  • Функция может быть объявлена только как статический метод с публичной областью видимости. Не допускается объявление через интерфейсы.
  • В определении метода должно использоваться ключевое дополнение FOR TABLE FUNCTION имяABAPCDSфункции. Соответственно одна и та же функция может быть использована только для одной ABAP CDS Table function.
  • Параметры AMDP табличной функции не объявляются в описании метода, они должны быть описаны как параметры ABAP CDS. Параметры всегда имеют элементарный тип, не допускается опциональных параметров.
  • Возвращаемый табличный тип определяется относительно структуры ABAP CDS, для зависимых от манданта CDS в структуре компонентов будет так же поле мандант. Тип таблицы — стандартная, ключ по умолчанию с именем result включает в себя все поля таблицы.
  • Не могут быть напрямую вызваны из ABAP.
  • Сначала создаётcя ABAP CDS с описанием входных параметров и структуры, а уже затем создаётся AMDP функция.

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

Рассмотрим пример ABAP CDS:

Код AMDP функции:

Вызов из ABAP кода:

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *