Последовательное обновление базы данных в SAP / ABAP O / O - PullRequest
0 голосов
/ 07 мая 2020

Мне нужно обеспечить согласованное редактирование таблиц SAP для вызовов Fiori Backend. У меня есть несколько ситуаций, когда один вызов серверной части меняет более одной таблицы на стороне серверной части. Изменения записываются в транспортный запрос.

Я хочу реализовать стабильное безошибочное решение, чтобы, если первая таблица была изменена нормально, а вторая таблица не удалась (повторяющаяся запись, отсутствие авторизации), вся куча изменений отклонено. Тем не менее, похоже, что есть только «выполнить FM в задаче обновления», которая требует помещать все logi c каждого изменения серверной базы данных в FM.

Я что-то упускаю, или SAP действительно имеет нет объектно-ориентированного способа выполнения последовательных обновлений базы данных?

Единственный обходной путь, который у меня есть, - это проверить все эти предварительные условия вверх, что уже не так хорошо.

@ Florian: Например, обратный вызов действие «Утвердить» над документом, которое меняет: 1) Таблицу заголовка документа, статус поля меняется с «в рабочем процессе» на другое. 2) Таблица согласования - изменена текущая запись утверждающего. Или это добавление нового документа, где 1) добавляется запись таблицы заголовка документа 2) добавляется запись таблицы истории документа. Я не хочу вызывать функциональные модули, я хочу реализовать решение, используя только классы и методы классов. Раньше я работал с другими системами ERP, и там есть такие операторы, как «Начать транзакцию», «Подтвердить транзакцию» или «Откатить транзакцию». Start transcation означает, что вы запускаете LUW, который фиксируется только для «Commit transaction», и если вы вызываете «Rollback transaction», все текущие изменения базы данных этого LUW будут отменены. Интересно, почему в современном SAP нет ни одного из них, кроме старой задачи обновления FM (или я просто не замечаю, как это правильно обработать).

1 Ответ

2 голосов
/ 08 мая 2020

ВЫЗОВ ФУНКЦИОНАЛЬНОГО МОДУЛЯ ОБНОВЛЕНИЯ в ЗАДАЧЕ ОБНОВЛЕНИЯ - единственный способ. Как это работает в транснациональном приложении Fiori, например,

  1. База данных A: Вы занимаетесь бизнес-логами c, все в порядке. вызовите задачу UPDATE для таблицы A базы данных CUD.
  2. База данных B: вы выполняете бизнес-логи c, возникла проблема с авторизацией, вы вызываете исключение (Ошибка). ЗАДАЧА ОБНОВЛЕНИЯ для таблицы B базы данных CUD НЕ вызывается.

После обработки всех бизнес-логов c, в случае возникновения какого-либо исключения, уровень SADL / Gateway перехватит исключение и вызовет ROLLBACK WORK, что означает откат. В противном случае, если ошибок нет, он вызовет COMMIT WORK, что означает согласованные CUD для всех таблиц,

btw, что-либо ненормальное, например DUPLICATE ENTRY, происходит в функциональном модуле UPDATE, в зависимости от вашего кода, вы можете игнорировать или поднимите СООБЩЕНИЕ E, чтобы прервать операции с БД. С моей точки зрения, таких проблем следует избегать до вызова функционального модуля UPDATE.

...