РАЗРАБОТКА ABAPP1L2

ABAP: Function Modules и BAPI как контракты

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

Ревизия 1 Применимость к указанным контекстам Частичное покрытие Контекст: CTX-GENERAL документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

ABAP: Function Modules и BAPI как контракты#

Function module предоставляет именованный интерфейс для передачи данных и обработки результата в ABAP. BAPI является опубликованным бизнес-интерфейсом объекта и имеет отдельные правила контракта и транзакции. Не всякий function module является BAPI, а RFC-enabled не означает автоматически released, стабильный или рекомендуемый для внешней интеграции.

Спроектируйте явный интерфейс#

Перед созданием модуля сначала проверьте, существует ли подходящая стандартная функция или released API. Если нужна новая функция, определите её область ответственности, входные и выходные параметры, исключения и поведение при частичном отказе. Интерфейс должен выражать единицы, валюты, формат ключа, обязательность и версии структур, а не полагаться на неявные глобальные данные function group.

Группируйте связанные модули по общей функции и учитывайте, что runtime загружает function group целиком. Документируйте параметры и ограничения, проверяйте типизацию и граничные значения, добавляйте полномочия там, где модуль пересекает границу доступа, и тестируйте вызываемый контракт вместе с вызывающей программой.

Понимайте контракт BAPI#

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

Уточните доступность и статус поддержки конкретного BAPI для продукта и релиза. Старый объект может быть RFC-enabled, но документация способна прямо не рекомендовать его для RFC-сценария. Для новых расширений проверьте released API и модель расширяемости целевой редакции вместо выбора только по совпадающему имени.

Транзакция и фиксация#

В документированной модели BAPI вызывающая сторона контролирует завершение объединённой единицы работы. Записывающий BAPI обычно не должен самовольно выполнять COMMIT WORK, чтобы клиент мог объединить несколько согласованных вызовов и решить, когда фиксировать или откатывать транзакцию. Сервисные функции commit/rollback применяйте согласно контракту BAPI и release-specific документации.

Не переносите эти правила на любой function module без проверки. Уточните, какие изменения происходят при вызове, как используется update task, что означает успешный ответ, какие сообщения считаются ошибками и какие ограничения действуют между чтением и записью в одном SAP LUW. После сетевого таймаута проверьте состояние по бизнес-ключу прежде, чем повторять запись.

Для интеграционного вызова зафиксируйте endpoint и версию контракта, техническую идентичность, бизнес-ключ, correlation ID, таймаут, порядок, правила повторов, идемпотентность и сверку результата. RFC transport не является бизнес-гарантией доставки ровно один раз. Не создавайте синхронную цепочку вызовов, которая скрывает длительные операции и оставляет неизвестным состояние частично выполненной работы.

Источники описывают ABAP Platform 2025 и транзакционную модель BAPI. Фактическая поддержка интерфейса зависит от целевой системы и выпуска. В проекте нет SAP runtime; function modules, BAPI, RFC, commit и rollback не выполнялись.

Источники и документация

  1. Overview of Function Modules ↗
  2. Creating New Function Modules ↗
  3. Transaction Model for Developing BAPIs ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.