Текущее время: Пн, июл 21 2025, 17:14

Часовой пояс: 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 часа


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

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


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

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