SAP Учебное пособие по BAPI – Как создать BAPI в ABAP
⚡ Умное резюме
БАПИ в SAP ABAP — это стандартизированный, поддерживающий RFC метод создания бизнес-объектов, позволяющий внешним приложениям взаимодействовать с процессами и данными R/3. На этой странице рассматриваются стандартизированные BAPI, как создать BAPI в SWO1, тестирование, выпуск и как вызывать BAPI из ABAP.

Что такое БАПИ?
Интерфейс программирования бизнес-приложений (BAPI) — это стандартизированные программные интерфейсы (методы), позволяющие внешним приложениям получать доступ к бизнес-процессам и данным в системе R/3.
Oни обеспечить стабильные и стандартизированные методы для достижения плавной интеграции между системой R/3 и внешними приложениями, устаревшими системами и надстройками.
BAPI определены в BOR (репозиторий бизнес-объектов) как методы SAP Типы бизнес-объектов, выполняющие определенные бизнес-функции. Они реализуются как Функция с поддержкой RFC модули и создаются в построителе функций ABAP Workbench.
Некоторые BAPI и методы предоставляют базовые функции и могут использоваться для большинства задач. SAP Бизнес-объекты. Они называются СТАНДАРТИЗИРОВАННЫЕ BAPI.
Список стандартизированных BAPI:
- BAPI для чтения данных — GetList(), GetDetail(), GetStatus(), ExistenceCheck().
- BAPI для создания или изменения данных — Create(), Change(), Delete() и Undelete(),
- BAPI для массовой обработки — ChangeMultiple(), CreateMultiple(), DeleteMultiple().
Преимущества BAPI
Использование BAPI предпочтительнее экранных методов, поскольку это документированный и выпущенный интерфейс, который SAP Обеспечивает стабильность работы на протяжении всех релизов. Это дает ряд практических преимуществ.
- Стабильный интерфейс: Подпись выпущенной BAPI не изменяется при обновлении, поэтому вызывающая программа продолжает работать.
- Повторное использование бизнес-логики: BAPI выполняет те же проверки, что и транзакция, поэтому данные, добавленные через него, остаются согласованными.
- Удаленный доступ включен: Поскольку BAPI представляет собой функциональный модуль с поддержкой RFC, его можно вызывать из другого модуля. SAP система, Java или программа на платформе .NET, или веб-сервис.
- Зависимость от экрана отсутствует: В отличие от пакетной записи входных данных, BAPI не ломается при изменении макета экрана.
После того, как концепция и ее преимущества стали ясны, в следующем разделе пошагово рассматривается создание BAPI.
Как создать БАПИ
Шаг 1) Перейдите к транзакции swo1 (Инструменты->Business Framework -> Разработка BAPI -> Построитель бизнес-объектов). Выберите бизнес-объект в соответствии с функциональным требованием, для которого создается BAPI.
Шаг 2) Откройте бизнес-объект в режиме изменения. Затем выберите «Утилиты» -> «Методы API» -> «Добавить метод». Затем введите имя функционального модуля и нажмите «Продолжить».
Шаг 3) В следующем диалоговом окне необходимо указать следующую информацию:
- Метод: предложите подходящее имя для метода.
- Тексты: введите описание BAPI,
- Радиокнопки: Диалог, Syncхронический, независимый от экземпляра. BAPI обычно реализуются синхронно.
Шаг 4) Чтобы создать метод, выберите Да в следующем диалоговом окне.
Шаг 5) После того, как программа была сгенерирована и выполнена, проверьте программу в только что созданном методе. Таким образом, создается BAPI.
Тестирование БАПИ
Вы можете протестировать BAPI, Тестирование отдельный метод бизнес-объекта в построителе бизнес-объектов. (или можно использовать транзакцию SWUD для проверки метода).
Освобождение и заморозка BAPI
- Чтобы освободить BAPI, сначала освободите функциональный модуль (с помощью транзакции se37).
- Установите статус метода на «выпущен» в Business Object Builder (используя транзакцию SWo1 – Редактировать-> изменить статус-> выпущен.)
Вы также можете использовать BAPI Explorer (код транзакции BAPI) для 360-градусного просмотра BAPI.
Как вызвать BAPI в ABAP
Вызов BAPI осуществляется так же, как и любого функционального модуля с поддержкой RFC. Важное правило заключается в том, что BAPI никогда не отправляет собственный COMMIT WORK, поэтому вызывающая сторона должна подтвердить изменение с помощью BAPI_TRANSACTION_COMMIT или отменить его с помощью BAPI_TRANSACTION_ROLLBACK. В приведенном ниже примере создается заказ на продажу с использованием стандартного BAPI.
DATA: ls_header TYPE bapisdhd1, lt_items TYPE STANDARD TABLE OF bapisditm, lt_return TYPE STANDARD TABLE OF bapiret2, lv_order TYPE vbeln. * Fill the header and item structures, then call the BAPI CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = ls_header IMPORTING salesdocument = lv_order TABLES order_items_in = lt_items return = lt_return. * A BAPI does not commit on its own - decide based on the return table READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.
⚠️ Предупреждение: Перед подтверждением транзакции всегда проверяйте таблицу RETURN на наличие сообщения типа E или A. Вызов BAPI_TRANSACTION_COMMIT после ошибки сохраняет неполный документ, что является одной из наиболее распространенных ошибок BAPI.
BAPI против BDC против RFC
БАПИ, а BDCи простой RFC — все они перемещают данные в SAPОднако они различаются по стабильности и по тому, что используют повторно. В таблице ниже приведено их сравнение.
| Критерии | BAPI | BDC | RFC (пользовательский) |
|---|---|---|---|
| Интерфейс | Выпущенный метод бизнес-объекта | Последовательность экранов транзакции | Любой пользовательский функциональный модуль |
| Стабильность при обновлении | Гарантировано для выпущенных BAPI. | Перерыв в работе при изменении экрана. | Зависит от разработчика. |
| Дистанционное управление включено | Да | Нет | Да |
| Проверка бизнеса | Полный, как и в случае транзакции. | Полная версия, отображает сами экраны. | Только то, что написал разработчик. |
| лучше всего для | Стабильная интеграция и интерфейсы. | Загрузки, для которых отсутствует BAPI. | Индивидуальные услуги "точка-точка" |
Общее правило таково: используйте выпущенный BAPI, если он существует, переключайтесь на BDC, если его нет, и оставляйте пользовательские RFC для специализированных сервисов.





