Link Search Menu Expand Document

BADI на основе AQO

Часто бывает так что стандартная BADI не поддерживает создание множества инстанций.

Или же нужно создать несколько независимых друг от друга имплементаций, которые вызываются по определённому условию (к примеру, по БЕ) или же подряд.

Конечно, можно создать собственную BADI, но это бывает не очень удобно делать. И это не так быстро, как предложенное ниже решение.

Описание интерфейса

Предположим, у нас есть интерфейс с методом SOME_METHOD без аргументов. И две реализации ZCL_AQO_BADI_TEST_01 и ZCL_AQO_BADI_TEST_02 которые просто выводят произвольное сообщение.

image


Новый метод

Теперь в дополнение методу CREATE который создавал обычную настройку на основе READ-ONLY атрибутов класса, добавлен метод FIND_BADI который работает подобно GET BADI с фильтром.

image

Давайте взглянем на пример вызова нового метода SE38->ZAQO_BADI

image

То есть мы передаем фильтр (БЕ = 0001) и название интерфейса и получаем таблицу со всеми подходящими реализациями. Их может быть несколько, одна или же вообще ни одной.

Интерфейс

После создания настройки давайте запустим транзакцию ZAQO и посмотрим что у нас получилось

image

Визуально отображается другая иконка, которая подчеркивает, что это не обычная настройка.

OPTION_ID равен названию интерфейса.

PACKAGE равен пакету, в котором сохранен интерфейс.

Внесем следующие значения

image

Обратите внимание что:

  • Средство поиска показывает все имплементации данного интерфейса

  • Если над каждой конкретной реализацией работают различные люди можно деактивировать вызов без удаления строки на время теста

  • Один и тот же класс ZCL_AQO_BADI_TEST_01 может встречаться в настройке несколько раз, но в et_badi[] будет лишь 1 экземпляр этого класса

Результат вызова

В нашем примере в таблице lt_badi[] будет один экземпляр класс ZCL_AQO_BADI_TEST_01 и будет показоно сообщение Class 01 один раз.

image

Журнал использования

Журнал использования, а также прочие вкладки Транспорт, Общая информация и Вложения (для документации) остались на своих местах

Сканер кода покажет все места вызова данного интерфейса. При повторном вызове метода FIND_BADI создастся лишь 1 экземпляр класса ZCL_AQO_BADI_TEST_01.

image