Текущее время: Пт, мар 29 2024, 02:42

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Модуль обновления: нарушена транзакционность
СообщениеДобавлено: Чт, дек 15 2016, 11:34 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Добрый день! Подскажите, пожалуйста:

В документации написано, что транзакционность на уровне сервера приложений обеспечивают «модули обновления» (такие как CALL FUNCTION IN UPDATE TASK, PERFORM ON COMMIT).

Использую perform on commit, но транзакционность нарушается.
Code:
report  ztest.

perform test on commit.
commit work and wait.

form test .
  data: ls_test1 type ztest1.
  select single * from ztest1 into ls_test1
    where var = '3 ' and belnr = '0000000032'.
  delete from ztest1
  where var = '3 ' and belnr = '0000000032'.
  ls_test1-var = '1 '.
  ls_test1-belnr = '0000000001'.
  insert ztest1 from ls_test1.
endform.                    " TEST


Строчка удаляется из таблицы ztest1, но новая строчка не добавляется (в данном случае - из-за дубликата).
Почему транзакционность нарушена (одна операция в модуле обновления выполнена, а вторая нет) при использовании модуля обновления?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Чт, дек 15 2016, 11:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
Потому, что вы сами должны обработать ситуацию "ошибка в процессе обновления". Т.к. вы ее не обработали, т.е. не сообщили системе как себя вести, то программа считает, что все нормально и завершает операцию. Необходимо выдавать ошибку\падать в дамп\что-то еще, чтобы система увидела, что надо отменить изменения

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Чт, дек 15 2016, 14:43 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Спасибо!
А в чем тогда плюсы использования модулей обновновления в своих z-транзакциях?
Чем модули обновления лучше чем прямые обновления?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Чт, дек 15 2016, 16:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
Цитата:
Чем модули обновления лучше чем прямые обновления?

Именно тем, что они помогают (именно что помогают, т.к. не только они это делают) обеспечить транзакционность изменений.
На прямые изменения БД влияют различный действия ( см. implicit commit work\rollback work в help)

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Чт, дек 15 2016, 22:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
skaa написал(а):
А в чем тогда плюсы использования модулей обновновления в своих z-транзакциях?
Чем модули обновления лучше чем прямые обновления?

Если вы захотите, то любой каскад изменений или пройдет, или нет. Кодер об этом и написал.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Пт, дек 16 2016, 00:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
skaa написал(а):
Спасибо!
А в чем тогда плюсы использования модулей обновновления в своих z-транзакциях?
Чем модули обновления лучше чем прямые обновления?

Ничем!
Это один из множества костыликов SAP для решения исторически сложившихся проблем, когда прямое обновление невозможно.
Строго говоря, с точки зрения соблюдения целостности данных, этот механизм нарушает "транзакционный механизм", точнее не гарантирует его.
В остальном всё правильно сказали, ошибка Insert ещё не повод откатывать всю транзакцию, может программист так и задумал, соответственно ему и решать что делать дальше.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Пт, сен 22 2017, 15:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Че то не уловил где тут нарушение транзакционности.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Пт, сен 22 2017, 16:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
ТС надеялся, что падение одной операции в модуле perform on commit будет валить всю транзакцию БД. А этого не было.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Пт, сен 22 2017, 17:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Кодер написал(а):
ТС надеялся, что падение одной операции в модуле perform on commit будет валить всю транзакцию БД. А этого не было.

Но не в модуле обновления это будет так же точно работать.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Ср, сен 27 2017, 07:57 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 09:38
Сообщения: 170
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. Если где не прав, буду благодарен за поправки, сам особо в эту тему не углублялся.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Ср, сен 27 2017, 16:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Нашел тут мегатред viewtopic.php?t=33320

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления -нарушена транзакционность.
СообщениеДобавлено: Ср, сен 27 2017, 17:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
А тут истина https://help.sap.com/http.svc/rc/abapdo ... ap_luw.htm

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль обновления: нарушена транзакционность
СообщениеДобавлено: Вт, янв 26 2021, 20:09 
Начинающий
Начинающий

Зарегистрирован:
Чт, дек 15 2016, 13:36
Сообщения: 1
Вам нужно было после каждого изменения БД делать проверку sy-subrc и вызывать сообщение с типом 'A', именно такое сообщение откатит все сделанные изменения, ROLLBACK WORK внутри модулей обновления использовать нельзя.
Code:
if sy-subrc is initial.
  message text-a01 type 'A'.
endif.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB