Что такое badi в sap
В чем разница между BAPI и BADI
главное отличие между BAPI и BADI является то, что BAPI позволяет соединять системы AP с системами AP или не-AP, в то время как BADI позволяет добавлять усовершенствования для улучшения функциональны
Содержание:
главное отличие между BAPI и BADI является то, что BAPI позволяет соединять системы SAP с системами SAP или не-SAP, в то время как BADI позволяет добавлять усовершенствования для улучшения функциональных возможностей без влияния на исходные коды.
Ключевые области покрыты
1. Что такое БАПИ
— определение, особенности
2. Что такое БАДИ
— определение, особенности
3. В чем разница между BAPI и BADI
— Сравнение основных различий
Основные условия
Что такое БАПИ
BAPI расшифровывается как Интерфейс программирования бизнес-приложений, Он работает как интерфейс для передачи данных из систем SAP в системы, отличные от SAP, или между системами SAP. Другими словами, он связывает код клиента и сторонние приложения с продуктами SAP. BAPI подтверждает, что все проверки бизнес-логики, проверки и авторизации выполняются правильно при доступе или изменении бизнес-объектов. Он выполняет эту задачу, оборачивая BAPI внутренними уровнями бизнес-объекта SAP.
Что такое БАДИ
В BADI есть два основных компонента: определение BADI и реализация BADI. Определение BADI назначает точку выхода для исходного кода объекта, в то время как реализация BADI позволяет включать необходимый код без изменения исходного исходного кода объекта.
Есть несколько преимуществ BADI. Методы улучшения в BADI используют объектно-ориентированные методы. Поэтому разработчики могут реализовать их несколько раз в приложении. BADI также обеспечивает восходящую совместимость. Кроме того, это не влияет на работу из-за обновлений выпуска.
Разница между BAPI и BADI
Определение
Длинная форма
функциональность
BAPI позволяет разработчикам интегрировать SAP с SAP или другими решениями, тогда как BADI позволяет разработчикам расширять решения SAP с помощью пользовательских программ, оставаясь совместимым с обновлениями. Следовательно, это еще одно различие между BAPI и BADI.
Заключение
Разница между BAPI и BADI заключается в том, что BAPI позволяет соединять системы SAP с системами SAP или не-SAP, в то время как BADI позволяет добавлять усовершенствования для улучшения функциональных возможностей без влияния на исходные коды.
Что такое badi в sap
BAdI (или Business Add-Ins) появились уже в 4.7 версии, но я там не был, поэтому то, что я здесь написал, справедливо для версии ERP2005.
Запускаем SE24, указываем класс «cl_exithandler».
Тыкаем «Просмотр», в появившемся списке тыкаем в метод GET INSTANCE 2 (два) раза быстро (double click). Открывается исходный код. Переходим на строку CASE sy-subrc. (Это в начале, у меня это строка 28 ).
Ставим бряк на эту строку.
Запускаем нужную нам транзакцию, например, me21n. Вылезает окно отладчика, смотрим содержимое EXIT_NAME. Для перехода к следующему сработавшему BAdI нажимаем F8.
_________________
Eritis sicut Deus, scientes bonum et malum.
Последний раз редактировалось SAA Чт, авг 14 2008, 07:36, всего редактировалось 3 раз(а).
Гуру-эксперт |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Вот прога, с помощью которой это ( найти Exit-ы и BADI ) сделать проще (к сожалению не помню откуда ее взял, так что прямой ссылки на источник-оригинал дать не могу): REPORT ZPM_X_EXIT_BADI NO STANDARD PAGE HEADING TABLES : TSTC, DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE. IF NOT P_TCODE IS INITIAL. ELSEIF NOT P_PGMNA IS INITIAL. IF SY-SUBRC EQ 0. MOVE : TADIR-DEVCLASS TO V_DEVCLASS. IF SY-SUBRC NE 0. SELECT SINGLE * FROM ENLFDIR SELECT SINGLE * FROM TADIR MOVE : TADIR-DEVCLASS TO V_DEVCLASS. SELECT * FROM TADIR INTO TABLE JTAB SELECT SINGLE * FROM TSTCT LOOP AT JTAB into wa_tadir. endif. 2 wf_object2, case wa_tadir-object. ELSE. data : wf_object type tadir-object. GET CURSOR FIELD FIELD1. case wf_object. CALL TRANSACTION ‘SMOD’ AND SKIP FIRST SCREEN. Последний раз редактировалось OlegDm Ср, ноя 21 2007, 06:23, всего редактировалось 1 раз. |
Директор |
Зарегистрирован:
Чт, авг 18 2005, 17:00
Сообщения: 1174
Откуда: РФ
Модератор |
Зарегистрирован:
Чт, май 19 2005, 12:34
Сообщения: 1941
Откуда: НК
Пол: Мужской
_________________ |
Старший специалист |
Зарегистрирован:
Чт, авг 02 2007, 14:26
Сообщения: 442
Откуда: S/4 HANA
Пол: Мужской
Менеджер |
Зарегистрирован:
Вт, авг 17 2004, 10:25
Сообщения: 627
Начинающий |
Зарегистрирован:
Чт, ноя 22 2007, 18:33
Сообщения: 1
Гуру-эксперт |
Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
Почетный гуру |
Зарегистрирован:
Чт, сен 29 2005, 07:34
Сообщения: 1127
Откуда: РОССИЯ
Пол: Мужской
_________________ |
Почетный гуру |
Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
Часовой пояс: UTC + 3 часа Кто сейчас на конференцииСейчас этот форум просматривают: нет зарегистрированных пользователей |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…
BADI. Поиск и использование
Business Add-Ins
User-Exits позволяют клиентам прикрепить дополнительный код для стандартных SAP исходный код без необходимости изменения исходного объекта. Business Add-Ins SAP методика расширений, основанная на ABAP Objects.
Служат для того, чтобы вносить модификацию в алгоритм обработки объекта и свести к минимуму работы при обновлении системы.
Основным преимуществом данной концепции является возможность повторного использования. BAdI может быть реализован несколько раз.
Как найти BADI которая срабатывает при конкретном действии :
В классе cl_exithandler в методе GET_INSTANCE ставим точку останова. В exit_name будет вызываемая в данный момент времени BADI.
Sxv_get_clif_by_name – ставим точку останова. В name будет имя BADI.
Работа с BADI
Рис 1.
Если установлена «1» (Рис 1.) – возможно одновременно иметь несколько активных реализаций.
Если установлена «2» (Рис 1.) – срабатывание реализаций зависит от фильтра. Для случаев если фильтр отсутствует необходимо ставить проверки в начале каждого реализованного метода BADI т.к. реализации срабатывают для всех инфо-типов (например).
Работа с реализациями происходит в пункте меню «Внедрение» (Рис2.) При создании внедрения BADI создается класс методы которого необходимо переопределить согласно нашей задачи.
Рис 2.
При создании BADI с фильтром есть возможность указать информацию для фильтра. (Рис 3.)
Рис 3.
Рис 4.
Активные реализации (то есть те которые срабатывают) помечены желтым цветом, деактивированные – синим. (Рис 4.)
Рис 5.
1 – активировать реализацию
2 – деактивировать реализацию (в данном состоянии код выполнятся не будет).
Часто используемые BADI в HR
HRBAS00_RELAT – BADI для соединений.
HRPAD00INFTY – BADI для администрирования персонала
HRBAS00INFTY – BADI для инфо-типов организационного менеджмента.
Расширения и модификации SAP. (BC425). Часть 2
Ковальский Василий Львович
Часто бывает нужно сделать так, чтобы стандартное программное обеспечение работало не так, как оно работает, а как-то иначе. Можно просто модифицировать существующее программное обеспечение. Можно, если сделать аккуратно, без ошибок. Но от производителя время от времени приходят обновленные версии, заменяющие старые. После приема новых версий старые будут потеряны вместе с внесенными в них изменениями.
Содержание
6. Классические BAdI
Хотелось бы иметь вполне транзитивную технологию расширений, допускающую множественную имплементацию и позволяющую расширять программный код, меню и экраны. Тут сразу придется «обломать хотелки». Множественные имплементации на уровне программ это последовательное исполнение разных имплементаций одна за другой. А вот множественные имплементации на уровне представлений принципиально невозможны: ну не показывать же в одном и том же месте экрана разные подэкраны один за другим или в пункте меню то один текст, то другой!
С версии 4.6 появилась технология расширений BAdI (Business Add-In). BAdI допускает имплементацию, в том числе множественную, программных расширений и не множественную имплементацию расширений меню, а с 6-х версий еще и экранов. Эта технология вполне транзитивна по программным расширениям: можно делать свои имплементации программных расширений, создавая в них свои расширения программ, меню и экранов. Эта технология транзитивна потому, что BAdI идентифицируется именем. Повторяем первую мантру: нужно вести свои разработки в собственном диапазоне имен.
Для каждого BAdI можно создать произвольное количество имплементаций. В случае расширений меню и/или экранов создается BAdI, не допускающий множественного использования (multiple use), в случае только программного расширения обычно создается BAdI с возможностью множественно использования. Словосочетание «множественное использование» означает в данном случае, что можно одновременно активировать больше одной имплементации, в противном случае можно активировать не больше одной, хотя создать можно много имплементаций, просто остальные не будут активными.
Для классических BAdI поставщик может создать умалчиваемую имплементацию (она будет применяться при отсутствии имплементации пользователя) и шаблон имплементации (пользователь может не писать свою имплементацию «с нуля», а скопировать к себе шаблон и дальше редактировать уже готовую имплементацию)
Как выше уже отмечалось, расширения меню и экранов непременно требуют программных расширений. Так что в любом BAdI будет программное расширение. Поставщик создает в своем диапазоне имен объект репозитария типа BAdI. Каждому BAdI соответствует интерфейс в обычном объектно-ориентированном смысле и автоматически создаваемый служебный класс, обладающий этим интерфейсом.
Чтобы воспользоваться программным расширением BAdI создается имплементация (объект репозитария). Каждой имплементации соответствует класс, обладающий интерфейсом BAdI. Повторим вторую мантру: внутри имплементации (в данном случае имплементации метода) можно написать нужную функциональность, но гораздо лучше эту функциональность оформить в виде функционального модуля или публичного метода глобального класса, а внутри имплементации осуществить только вызов. После того, как проимплементированы методы интерфейса BAdI следует активировать класс, после чего можно активировать всю имплементацию и тогда нужная функциональность заработает. Если BAdI «множественного использования», то можно активировать больше одной имплементации. Как и в случае BT-событий, порядок исполнения множественных имплементаций не определен. Ни одна из них не может служить источником данных для других.
Работает все это так. Поставщик декларирует в своей программе переменную типа ссылка на интерфейс BAdI, создает объекты классов активных имплементаций и служебного класса BAdI вызовом статического метода
CALL METHOD CL_EXITHANDLER=>GET_INSTANCE
Ссылка на объект служебного класса возвращается в переменную типа ссылка на интерфейс. Далее в нужных местах программы вызываются соответствующие методы по ссылке на интерфейс. Методы служебного класса BAdI в цикле по таблице ссылок на объекты активных имплементаций исполняют одноименные методы имплементирующих классов. Звучит страшновато, но это хорошо видно в отладчике.
В рамках технологии Customer Exits для каждого экранного расширения можно создать не более одной имплементации, поскольку номер подэкрана и имя программы, содержащей эту имплементацию, статически определены в расширяемой программе. В отличии от этого BAdI позволяет создать несколько имплементаций расширений экранов (хотя – напомним – в каждый момент времени активным может быть не более, чем одна). Поэтому расширяемая программа заранее не знает, каким подэкраном какой программы будет имплементировано экранное расширение и не знает в какую программу надо передать данные до вызова подэкрана и откуда надо получить данные после того, как подэкран отработает.
Классическое BAdI экранного расширения определяет на каком экране какой программы в какой области подэкрана должен предъявляться имплементирующий подэкран. В интерфейсе такого BAdI определяются инстанционные атрибуты и два метода аксессора: сеттер и геттер. Инстанционные атрибуты будут хранить данные передаваемые в подэкран и обратно. Методы аксессоры осуществляют эту передачу данных.
Вот что делается при имплементации экранного расширения классического BAdI. Cоздается программа, в которой определяется имплементирующий подэкран. Технически такая программа может быть типа отчет, модульный пул или функциональная группа; на практике же используются именно функциональные группы. Такие функциональные группы могут вообще не содержать функциональных модулей. В имплементации экранного расширения указывается имя этой программы и номер подэкрана и создается имплементирующий класс. В имплементации аксессоров в сеттере устанавливаются значения инстанционных атрибутов, в геттере значения инстанционных атрибутов передается в выходные параметры. В TOP-инклюде имплементирующей программы определяются переменная типа ссылка на интерфейс, переменные для подэкрана и вычислений (если вычисления нужны), в PBO-модуле подэкрана сначала нужно получить ссылку на имплементирующий объект, это делается методом
после чего геттером получаем данные из имплементирующего объекта. Если нужно, делаем вычисления, поиски, заполняем переменные подэкрана. В PAI-модуле подэкрана
сеттером устанавливаем новые значения атрибутов имплементирующего объекта.
А теперь как это все работает.
(1) В расширяемой программе объявляется переменная типа ссылка на интерфейс BAdI.
До вызова PBO-логики имплементирующего подэкрана
(2) Методом CL_EXITHANDLER=>GET_INSTANCE создается имплементирующий объект ивозвращается ссылка на него.
(3) Сеттером устанавливаются атрибуты имплементирующего объекта.
(4) Методом CL_EXITHANDLER=>SET_INSTANCE_FOR_SUBSCREENS в класс CL_EXITHANDLER передается ссылка на имплементирующий объект.
(5) Методом CL_EXITHANDLER=>GET_PROG_AND_DYNP_FOR_SUBSCR из описания активной имплементации выбираются имя имплементирующей программы и номер подэкрана.
(6) В логике обработке расширяемого экрана вызывается имплементирующий подэкран. После (5) уже известно, какой именно.
Исполняется имплементирующий подэкран.
(7) Исполняется PBO-логика имплементирующего подэкрана. В том числе и тот модуль, в котором геттер получает данные из имплементирующего объекта и передает их в переменные имплементирующего подэкрана.
(8) Исполняется PAI-логика имплементирующего подэкрана, а в ней тот модуль, в котором имплементирующий подэкран передает с помощью сеттера (быть может измененные) данные в имплементирующий объект. Понятно, что этот модуль должен быть последним в PAI-логика имплементирующего подэкрана.
В PAI-логике расширяемой программы после вызова PAI-логики подэкрана.
(9) Вызывается геттер, который возвращает в расширяемую программу данные с имплементирующего подэкрана.
В общем не слишком сложно, хотя несколько громоздко. Пожалуй, можно сказать, что передача данных при этом несколько напоминает игру в наперсток (угадай, где сейчас актуальные данные).
7. Enhancement Framework
Все рассмотренные выше технологии и технология User Exits (о которой речь впереди) обладают недостатками. Новые технологии расширения и создавались для исправления недостатков более старых. А зачем же еще!
Технология User Exits позволяет расширять программы, но при этом нельзя воспользоваться одним User Exit одновременно для нескольких имплементаций. А ведь часто для решения какой-то одной задачи требуется воспользоваться сразу несколькими расширениями. Причем либо они все должны быть включены, либо все выключены. Технология User Exits не имеет «общего рубильника».
Технология Customer Exits имеет «общий рубильник» (транзакция CMOD), позволяет расширять программный код, экраны и меню, но эти расширения не могут иметь множественных имплементаций.
Технология Business Transaction Events имеет «общий рубильник» (транзакция FIBF), допускает множественные имплементации программных расширений, но не допускает расширений меню и экранов.
Технология Business Add-Ins имеет «общий рубильник» (транзакции SE19, SE18, SE80), допускает множественные имплементации программных расширений, допускает не множественные расширения меню и экранов.
Все эти технологии вместе обладают еще рядом общих недостатков. Расширения доступны только там, где это предусмотрел разработчик, ни строчкой выше, ни строчкой ниже. Все эти технологии позволяют добавить новую функциональность, но не позволяют заменить существующую новой или отменить существующую. У них нет общего для них всех «рубильника». Хотелось бы иметь больше расширений, иметь возможности замены и иметь «общий рубильник».
Начиная с 7-й версии, появился новый набор возможностей расширения объединяемых в Enhancement Framework:
— новые BAdI (New BAdIs);
— явные точки расширения (Explicit Enhacement Points);
— секции расширения (Enhacement Sections);
— неявные возможности (Implicit Enhacement Points and Options).
Для удобства управления новые BAdI, явные точки расширения и секции расширения собираются в Enhacement Spots. Enhacement Spots могут объединяться в Composite Enhacement Spots. Соответственно и имплементации придется создавать для Enhacement Spot, а внутри уже имплементировать BAdI, явные точки расширений, секции расширений.
Принципиально важно, что расширения меню и экранов новых BAdI, а также секций расширения не могут одновременно иметь несколько активных имплементаций. В противном случае понадобится средство для разрешения конфликта. Об этом средстве, о «конфликтных переключателях» речь пойдет дальше.
8. Новые BAdI
Также, как и классическим BAdI, новым BAdI непременно соответствуют интерфейсы (в объектно-ориентированном смысле), они могут быть или не быть «множественного использования». В последнем случае новое BAdI может содержать расширение меню или экрана.
Расширения программ и меню во многом подобны тому, как это делалось в классических BAdI. А вот
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
- Что такое badges в роблоксе
- Что такое badlion client