Что такое badi в sap

В чем разница между BAPI и BADI

главное отличие между BAPI и BADI является то, что BAPI позволяет соединять системы AP с системами AP или не-AP, в то время как BADI позволяет добавлять усовершенствования для улучшения функциональны

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Содержание:

главное отличие между BAPI и BADI является то, что BAPI позволяет соединять системы SAP с системами SAP или не-SAP, в то время как BADI позволяет добавлять усовершенствования для улучшения функциональных возможностей без влияния на исходные коды.

Ключевые области покрыты

1. Что такое БАПИ
— определение, особенности
2. Что такое БАДИ
— определение, особенности
3. В чем разница между BAPI и BADI
— Сравнение основных различий

Основные условия

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Что такое БАПИ

BAPI расшифровывается как Интерфейс программирования бизнес-приложений, Он работает как интерфейс для передачи данных из систем SAP в системы, отличные от SAP, или между системами SAP. Другими словами, он связывает код клиента и сторонние приложения с продуктами SAP. BAPI подтверждает, что все проверки бизнес-логики, проверки и авторизации выполняются правильно при доступе или изменении бизнес-объектов. Он выполняет эту задачу, оборачивая BAPI внутренними уровнями бизнес-объекта SAP.

Что такое БАДИ

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в 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 раз(а).

Гуру-эксперт
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

Вот прога, с помощью которой это ( найти Exit-ы и BADI ) сделать проще (к сожалению не помню откуда ее взял, так что прямой ссылки на источник-оригинал дать не могу):

REPORT ZPM_X_EXIT_BADI NO STANDARD PAGE HEADING
LINE-SIZE 80 LINE-COUNT 65 MESSAGE-ID ZM.

TABLES : TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT,
TSTCT.

DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
DATA wa_tadir type tadir.

IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.

ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.

IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = ‘R3TR’
AND OBJECT = ‘PROG’
AND OBJ_NAME = TSTC-PGMNA.

MOVE : TADIR-DEVCLASS TO V_DEVCLASS.

IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ ‘F’.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.

SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.

SELECT SINGLE * FROM TADIR
WHERE PGMID = ‘R3TR’
AND OBJECT = ‘FUGR’
AND OBJ_NAME EQ ENLFDIR-AREA.

MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.

SELECT * FROM TADIR INTO TABLE JTAB
WHERE PGMID = ‘R3TR’
AND OBJECT in (‘SMOD’, ‘SXSD’)
AND DEVCLASS = V_DEVCLASS.

SELECT SINGLE * FROM TSTCT
WHERE SPRSL EQ SY-LANGU
AND TCODE EQ P_TCODE.

LOOP AT JTAB into wa_tadir.
at first.
FORMAT COLOR COL_HEADING INTENSIFIED ON.

endif.
FORMAT COLOR COL_GROUP INTENSIFIED ON.

2 wf_object2,
105 SY-VLINE.
endat.

case wa_tadir-object.
when ‘SMOD’.
wf_smod = wf_smod + 1.
SELECT SINGLE MODTEXT into wf_txt
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = wa_tadir-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) ‘No userexits or BADis exist’.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) ‘Transaction does not exist’.
ENDIF.

data : wf_object type tadir-object.
clear wf_object.

GET CURSOR FIELD FIELD1.
CHECK FIELD1(8) EQ ‘WA_TADIR’.
read table jtab with key obj_name = sy-lisel+1(20).
move jtab-object to wf_object.

case wf_object.
when ‘SMOD’.
SET PARAMETER ID ‘MON’ FIELD SY-LISEL+1(10).

CALL TRANSACTION ‘SMOD’ AND SKIP FIRST SCREEN.
when ‘SXSD’.
SET PARAMETER ID ‘EXN’ FIELD SY-LISEL+1(20).
CALL TRANSACTION ‘SE18’ AND SKIP FIRST SCREEN.
endcase.

Последний раз редактировалось OlegDm Ср, ноя 21 2007, 06:23, всего редактировалось 1 раз.

Директор
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Чт, авг 18 2005, 17:00
Сообщения: 1174
Откуда: РФ

Модератор
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Чт, май 19 2005, 12:34
Сообщения: 1941
Откуда: НК
Пол: Мужской

_________________
Eritis sicut Deus, scientes bonum et malum.

Старший специалист
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Чт, авг 02 2007, 14:26
Сообщения: 442
Откуда: S/4 HANA
Пол: Мужской

Менеджер
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Вт, авг 17 2004, 10:25
Сообщения: 627

Начинающий
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Чт, ноя 22 2007, 18:33
Сообщения: 1

Гуру-эксперт
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

Почетный гуру
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Чт, сен 29 2005, 07:34
Сообщения: 1127
Откуда: РОССИЯ
Пол: Мужской

_________________
мне бы такой «Журнал изменений» как в SAP да в жизнь. цены бы не было!

Почетный гуру
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap
Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Зарегистрирован:
Вт, апр 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

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sapРис 1.

Если установлена «1» (Рис 1.) – возможно одновременно иметь несколько активных реализаций.

Если установлена «2» (Рис 1.) – срабатывание реализаций зависит от фильтра. Для случаев если фильтр отсутствует необходимо ставить проверки в начале каждого реализованного метода BADI т.к. реализации срабатывают для всех инфо-типов (например).

Работа с реализациями происходит в пункте меню «Внедрение» (Рис2.) При создании внедрения BADI создается класс методы которого необходимо переопределить согласно нашей задачи.

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sapРис 2.

При создании BADI с фильтром есть возможность указать информацию для фильтра. (Рис 3.)

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sapРис 3. Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sapРис 4.

Активные реализации (то есть те которые срабатывают) помечены желтым цветом, деактивированные – синим. (Рис 4.)

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sapРис 5.

1 – активировать реализацию

2 – деактивировать реализацию (в данном состоянии код выполнятся не будет).

Часто используемые BADI в HR

HRBAS00_RELAT – BADI для соединений.

HRPAD00INFTY – BADI для администрирования персонала

HRBAS00INFTY – BADI для инфо-типов организационного менеджмента.

Источник

Расширения и модификации SAP. (BC425). Часть 2

Что такое badi в sap. Смотреть фото Что такое badi в sap. Смотреть картинку Что такое badi в sap. Картинка про Что такое badi в sap. Фото Что такое badi в sap

Ковальский Василий Львович

Часто бывает нужно сделать так, чтобы стандартное программное обеспечение работало не так, как оно работает, а как-то иначе. Можно просто модифицировать существующее программное обеспечение. Можно, если сделать аккуратно, без ошибок. Но от производителя время от времени приходят обновленные версии, заменяющие старые. После приема новых версий старые будут потеряны вместе с внесенными в них изменениями.

Содержание

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

Источник

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

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