Очень часто в коде какого-либо user (customer) exit можно встретить кучу разных ветвлений, одно вставил программист Петя по задаче X, другое вставил программист Вася по задаче Y. Со временем подобный код становится плохо читаемым. Для удобства его восприятия можно воспользоваться современными BADI, основанными на Enhancement Framework.
Суть данного удобства заключается в том, что вместо кучи ветвлений и нагромождения кода в user exit вызывается свой BADI, конкретные реализации которого являются отдельными друг от друга объектами, каждый из которых ведется и описывается так же отдельно.
Ниже рассмотрен небольшой пример того, как создать и вызвать реализацию BADI.
- Заходим в транзакцию SE18 и создаем точку расширения:
- Создаем BADI для нашего user exit’a
Убедимся, что создаваемое BADI является многоразовым, т.е. допускается сколько угодно его реализаций:
- После создания BADI, определяем его интерфейс. В интерфейсе описываем единственный метод some_exit, метод будет получать данные из user exit’а. Далее, когда будут создаваться реализации нашего BADI, программисты сами будут решать, что делать с этими данными.
- Добавим единственный параметр:
- После определения BADI можно приступить к его вызову в коде user exit’a. Далее будет показано как вызвать BADI в тестовой программе (вместо вызова в коде user exit):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
REPORT ZTEST_BADI. DATA: go_badi_some_exit TYPE REF TO ZBADI_SOME_EXIT, gv_data TYPE String. START-OF-SELECTION. gv_data = 'Данные EXIT до вызова BADI'. GET BADI go_badi_some_exit. CALL BADI go_badi_some_exit->some_exit CHANGING ch_data = gv_data. WRITE gv_data. |
- Как видно после запуска данные остались неизменными, создадим реализацию расширения и BADI:
- Определим метод some_exit:
Убедимся, что все объекты были активированы, вызовем наш тестовый отчёт еще раз. Как видно из результата мы изменили данные в реализации BADI.
Спасибо за статью!
Классно было бы увидеть ряд подобных статей на тематику расширения стандарта!
Спасибо за комментарий 🙂 , расширение стандартных транзакций с enhancement framework? Или в целом по технологям расширений?
Вам спасибо за сайт:) Много полезного черпаю!
В целом по технологиям расширения (User-Exits,Screen-Exits,Menu-Exits,BTE,Замещения,Customer Exit,Modification и т.д.), включая конечно и enhancement framework!;)
Думаю, всем, особенно начинающим, будет весьма интересно это прочитать в «живых» примерах.
По поводу BTE можете почитать тут:
http://sapland.ru/articles/stats/2013/1/bte-business-transaction-events.html