Текущее время: Чт, июл 24 2025, 13:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Автономная транзакция.
СообщениеДобавлено: Чт, окт 08 2009, 16:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Доборго времени суток!

Как можно организовать автономную транзацию?

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Чт, окт 08 2009, 23:17 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
Друзья, есть идеи? :|

Необходимо писать лог вне зависимости от того commit-ом или rollbackом завершится основная транзакция.

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 00:52 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
east написал:
Друзья, есть идеи? :|

Необходимо писать лог вне зависимости от того commit-ом или rollbackом завершится основная транзакция.

db_commit или rfc вызов на выбор.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 16:39 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
sy-uname написал(а):
db_commit или rfc вызов на выбор.

1.db_commit - дает database commit на Native SQL.
2.rfc вызов ничего не дает. Коммитятся все данные, как и в пункте №1.

Code:
Function ZTEST1 .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
  Data: ls_tab1 Type ztest1.
  Data: dest Type rfcdest value 'TEST@DEV.DOMAIN_DEV'. "коннект к текущей системе.
  Data: lv_x Value 1.
  Select Max( tabix ) From ztest1 Into ls_tab1-tabix.
  ls_tab1-tabix = ls_tab1-tabix + 1.
  ls_tab1-param = space.
  Modify ztest1 From ls_tab1.
  Call Function 'ZTEST2' Destination dest.
  Rollback Work.
EndFunction.

Code:
Function ZTEST2.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
  Data: ls_tab2 Type ztest2.
  Select Max( tabix ) From ztest2 Into ls_tab2-tabix.
  ls_tab2-tabix = ls_tab2-tabix + 1.
  ls_tab2-param = gc_x.
  Modify ztest2 From ls_tab2.
  Commit Work.
EndFunction.

Мне требуется сделать так, чтоб commit work в ФМ ztest2 влиял на базу только для изменений, внесенных в этом модуле.

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 16:46 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
CL_OS_TRANSACTION


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 16:57 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Пример у вас не очень корректный - неявный db commit происходит при RFC-вызове, т.е. Rollback после вызова уже ничего не откатит.
Если модифицировать таблицу БД не явно Modify ztest1 From ls_tab1., а посредством модуля обновления - то такая схема скорее всего будет работать. Правда проверять мне лень - уже 17.48 пятницы :)

UPD. А в rfcdest можно писать не TEST@DEV.DOMAIN_DEV, а NONE

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 17:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
east написал:
1.db_commit - дает database commit на Native SQL.


Да, именно. Поэтому его и рекомендовал.
Цитата:
2.rfc вызов ничего не дает. Коммитятся все данные, как и в пункте №1.

...
Мне требуется сделать так, чтоб commit work в ФМ ztest2 влиял на базу только для изменений, внесенных в этом модуле.

Так Вы делайте как рекомендует SAP, а не по "наколеночной" технологии.
Для обновления данных используйте специальные ФМ или подпрограммы, вызываемые через соответственно on update task или perform on commit/
Тогда Вам и неявный db_commit при rfc вызове не будет мешать сделать rollback, и в ztest2 данные попадут (автономно-транзакционно)..

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 17:09 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
ArmAnn написал:
Пример у вас не очень корректный - неявный db commit происходит при RFC-вызове, т.е. Rollback после вызова уже ничего не откатит.
Если модифицировать таблицу БД не явно Modify ztest1 From ls_tab1., а посредством модуля обновления - то такая схема скорее всего будет работать.


Про неявный db commit упустил.. А вот про модули обновления не вполне...
Code:
Set Update Task Local.
Call Function 'FUNCNAME' In Update Task.
...
Call Function 'ZTEST2' Destination NONE.
...
Commit work.
?


Пономарев Артем написал:
CL_OS_TRANSACTION

Спасибо. Проверю.

_________________
С уважением, Сергей С.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 17:19 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пн, сен 17 2007, 10:48
Сообщения: 190
Откуда: Нальчик, РФ
Пол: Мужской
sy-uname написал(а):
Так Вы делайте как рекомендует SAP, а не по "наколеночной" технологии.
Для обновления данных используйте специальные ФМ или подпрограммы, вызываемые через соответственно on update task или perform on commit/
Тогда Вам и неявный db_commit при rfc вызове не будет мешать сделать rollback, и в ztest2 данные попадут (автономно-транзакционно)..


Интересно.. А если я в User-Exit-е?

_________________
С уважением, Сергей С.


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

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
east, вам совсем не нужен SET UPDATE TASK LOCAL. Наоборот, вам необходимо разнести выполнение разных участков кода. А вы их упорно скрещиваете в одном LUW.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 17:42 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
east написал:

Интересно.. А если я в User-Exit-е?
Тем более это справедливо для User-Exit-а.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пт, окт 09 2009, 22:41 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Code:
Function ZTEST1 .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
  Data: ls_tab1 Type ztest1.
  Data: lv_x Value 1.
  Select Max( tabix ) From ztest1 Into ls_tab1-tabix.
  ls_tab1-tabix = ls_tab1-tabix + 1.
  ls_tab1-param = space.
*  Modify ztest1 From ls_tab1.
  Call Function 'FUNCNAME' In Update Task.

  Call Function 'ZTEST2' Destination 'NONE'.
  Rollback Work.
EndFunction.


Code:
Function FUNCNAME.
Modify ztest1 From ls_tab1.
EndFunction.


Code:
Function ZTEST2.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------
  Data: ls_tab2 Type ztest2.
  Select Max( tabix ) From ztest2 Into ls_tab2-tabix.
  ls_tab2-tabix = ls_tab2-tabix + 1.
  ls_tab2-param = gc_x.
  Modify ztest2 From ls_tab2.
* Commit Work.
  call  function 'DB_COMMIT'.
EndFunction.


пояснения:
1. вместо Modify ztest1 From ls_tab1. вы зовете модуль обновления FUNCNAME, который разумеется будет выполнен только после COMMIT WORK
2. при вызове ФМа ZTEST2 происходит коммит текущей транзакции БД
3. при операции modify в ФМе TEST открывается новая транзакция БД и пишутся данные в таблицу ztest1
4. эта транзакция комиттится ФМом 'DB_COMMIT'. Все, данные лога сохранены в БД. Дальнейший ROLLBACK WORK над этими данными уже силы не имеет

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пн, окт 12 2009, 01:18 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
2 ArmAnn ИМХО без разницы что писать в "Function ZTEST2." "Commit Work." или "call function 'DB_COMMIT'." они ведь всё равно в Destination 'NONE'.

2 east есть ещё варианты записи лога в файл OPEN DATASET... оно commit work не вызывает и roll back-ом не откатывается
ещё можно попробовать использовать EXPORT...SHARED BUFFER..

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автономная транзакция.
СообщениеДобавлено: Пн, окт 12 2009, 08:31 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
DKiyanov написал:
ИМХО без разницы что писать в "Function ZTEST2." "Commit Work." или "call function 'DB_COMMIT'." они ведь всё равно в Destination 'NONE'.

По моему тоже, но на 100% не уверен, поэтому и написал с DB_COMMIT. Так оно точно сработает

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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