skaa написал(а):
Спасибо!
А в чем тогда плюсы использования модулей обновновления в своих z-транзакциях?
Чем модули обновления лучше чем прямые обновления?
Если мне не изменяет память, то в SAP есть 2 понятия, имеющих к этому отношение: SAP LUW и DB LUW.
DB LUW как раз таки и отвечает за обновление данных в БД, но время жизни и события завершения этих LUW разные.
Так если SAP LUW живет до момента вызова явного коммита(в общем случае), то DB LUW обладает как явными, так и неявными коммитами/роллбэками.
Как пример, попробуйте сделать что-то типа этого:
Code:
ls_test-field1 = 'record1'.
INSERT ZTABAP FROM ls_test.
CALL FUNCTION 'ZTEST'
DESTINATION lv_destination
EXPORTING
OK = lv_result.
IF sy-subrc = 0.
ls_test-field1 = lv_result.
INSERT ZTABAP FROM ls_test.
commit work and wait.
ELSE.
ROLLBACK WORK.
ENDIF.
Следующие операции приводят к неявному коммиту БД, даже если вы не делали Commit work(из того что помню):
Переход между экранами, вызов ФМ по RFC, вывод ошибок(information, error), там что то еще с процессами, но с этим много не работал.
А если вы работали в старом отладчике, то вы должны понимать насколько эти неявные коммиты иногда портят процесс отладки.
Неявные роллбеки: дампы и message A/X, может еще что-то.
Модули обновлений позволяют производить коммит/роллбек одним скопом, например, в многоэкранной транзакции. Где при обычных запросах коммит бы происходил при каждой переходе с экрана на экран.
p.s. Если где не прав, буду благодарен за поправки, сам особо в эту тему не углублялся.