РАЗРАБОТКА ABAPP1L2

SAP LUW и границы фиксации изменений в ABAP

Чем SAP LUW отличается от DB LUW, когда срабатывает COMMIT WORK и почему граница фиксации должна принадлежать вызывающему процессу.

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

SAP LUW и границы фиксации изменений в ABAP#

В ABAP важно различать SAP LUW - логическую единицу бизнес-работы приложения - и DB LUW, то есть атомарную транзакцию базы данных. Одна SAP LUW может включать несколько шагов и запросов, а изменения могут быть организованы так, чтобы фиксироваться согласованно. DB LUW сама по себе не выражает бизнес-границу документа или процесса.

COMMIT WORK завершает текущую SAP LUW и инициирует фиксацию зарегистрированных изменений. В классическом сценарии он может запускать зарегистрированные update function modules; COMMIT WORK AND WAIT ожидает завершения синхронной обработки update task. ROLLBACK WORK отменяет текущую работу в пределах применимой модели SAP LUW, включая незапущенные регистрации update task. Точная последовательность и доступность механизмов зависят от платформы и версии; классический update task недоступен в ABAP Cloud.

Где должна находиться фиксация#

Повторно используемый доменный метод обычно не должен самовольно фиксировать транзакцию. Его вызывающая сторона может объединять несколько операций, и внутренний commit способен зафиксировать неполный бизнес-сценарий или лишить вызывающий код возможности отката. Поэтому договоритесь о владельце границы транзакции: команда приложения или верхнеуровневый сценарий координирует шаги и решает, когда завершить LUW.

Бизнес-операция должна иметь ясный контракт: какие изменения она готовит, какие ошибки возвращает или поднимает, какие внешние действия инициирует и кто отвечает за commit. Внешний HTTP-вызов, отправка сообщения или запись во внешнюю систему не становится атомарной с DB LUW автоматически. Для таких взаимодействий проектируйте отдельную надёжную координацию и обработку повторов; не представляйте это как гарантию обычной транзакции базы.

Update task и сбои#

В классическом ABAP вызов CALL FUNCTION ... IN UPDATE TASK регистрирует выполнение для более позднего этапа, который инициируется COMMIT WORK. Сам факт регистрации не означает, что изменение уже выполнено. Учитывайте отдельный update work process, диагностируйте ошибки через предусмотренные механизмы и не помещайте в update-функцию произвольные операции фиксации/отката. Для ABAP Cloud классическая модель update task неприменима - используйте поддерживаемые платформой API и модели транзакций.

AND WAIT влияет на ожидание синхронной обработки; оно не заменяет проверку всех последующих бизнес-условий и не превращает несвязанные внешние действия в атомарные. Ошибки после фиксации требуют компенсирующей бизнес-операции или процедуры восстановления, а не попытки откатить уже завершённую DB LUW.

Контроль проектирования#

  • Назовите границу SAP LUW для пользовательского или интеграционного сценария.
  • Проверьте, что все изменения, которые должны быть согласованы, действительно участвуют в этой границе.
  • Не скрывайте COMMIT WORK внутри общего сервиса без явного контракта.
  • Разделите транзакцию базы и внешние эффекты; определите поведение при повторной доставке и частичном отказе.
  • Проверьте классический update task только для релиза, где он поддерживается; отдельно проверяйте ограничения ABAP Cloud.
  • Тестируйте успех, откат, сбой update и повторный запуск в изолированной тестовой системе.

Текст описывает концептуальную модель по документации SAP. Здесь не запускались ABAP-программы, update task или транзакционные сценарии в SAP runtime.

Источники и статус доказательств#

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

  1. LUWs in ABAP ↗
  2. CALL FUNCTION, IN UPDATE TASK ↗

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