BADI на основе AQO
Часто бывает так что стандартная BADI не поддерживает создание множества инстанций.
Или же нужно создать несколько независимых друг от друга имплементаций, которые вызываются по определённому условию (к примеру, по БЕ) или же подряд.
Конечно, можно создать собственную BADI, но это бывает не очень удобно делать. И это не так быстро, как предложенное ниже решение.
Описание интерфейса
Предположим, у нас есть интерфейс с методом SOME_METHOD без аргументов. И две реализации ZCL_AQO_BADI_TEST_01 и ZCL_AQO_BADI_TEST_02 которые просто выводят произвольное сообщение.
Новый метод
Теперь в дополнение методу CREATE который создавал обычную настройку на основе READ-ONLY атрибутов класса, добавлен метод FIND_BADI который работает подобно GET BADI с фильтром.
Давайте взглянем на пример вызова нового метода SE38->ZAQO_BADI
То есть мы передаем фильтр (БЕ = 0001) и название интерфейса и получаем таблицу со всеми подходящими реализациями. Их может быть несколько, одна или же вообще ни одной.
Интерфейс
После создания настройки давайте запустим транзакцию ZAQO и посмотрим что у нас получилось
Визуально отображается другая иконка, которая подчеркивает, что это не обычная настройка.
OPTION_ID равен названию интерфейса.
PACKAGE равен пакету, в котором сохранен интерфейс.
Внесем следующие значения
Обратите внимание что:
Средство поиска показывает все имплементации данного интерфейса
Если над каждой конкретной реализацией работают различные люди можно деактивировать вызов без удаления строки на время теста
Один и тот же класс ZCL_AQO_BADI_TEST_01 может встречаться в настройке несколько раз, но в et_badi[] будет лишь 1 экземпляр этого класса
Результат вызова
В нашем примере в таблице lt_badi[] будет один экземпляр класс ZCL_AQO_BADI_TEST_01 и будет показоно сообщение Class 01 один раз.
Журнал использования
Журнал использования, а также прочие вкладки Транспорт, Общая информация и Вложения (для документации) остались на своих местах
Сканер кода покажет все места вызова данного интерфейса. При повторном вызове метода FIND_BADI создастся лишь 1 экземпляр класса ZCL_AQO_BADI_TEST_01.