Текущее время: Вт, июл 29 2025, 05:28

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:02 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Всем привет.

Есть ли способ внутри LUW (транзакции) породить другой LUW, в котором сделать update и commit так, чтобы это не повлияло на 1-LUW.
Вызывать ФМ по RFC не походит, т.к. сам вызов вызвает неявный commit.
Думал с помощью exec sql открыть новое соединение и в нем все сделать, но админы что-то не хотят добавлять еще одно соединение.

Есть еще варианты?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:10 
Гуру-эксперт
Гуру-эксперт

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

Есть ли способ внутри LUW (транзакции) породить другой LUW, в котором сделать update и commit так, чтобы это не повлияло на 1-LUW.
Вызывать ФМ по RFC не походит, т.к. сам вызов вызвает неявный commit.
Думал с помощью exec sql открыть новое соединение и в нем все сделать, но админы что-то не хотят добавлять еще одно соединение.

Есть еще варианты?

SAP Transactions

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:17 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
sy-uname написал(а):
profiteer написал(а):
Всем привет.

Есть ли способ внутри LUW (транзакции) породить другой LUW, в котором сделать update и commit так, чтобы это не повлияло на 1-LUW.
Вызывать ФМ по RFC не походит, т.к. сам вызов вызвает неявный commit.
Думал с помощью exec sql открыть новое соединение и в нем все сделать, но админы что-то не хотят добавлять еще одно соединение.

Есть еще варианты?

SAP Transactions


Ок, спасибо. Судя по описанию - то, что нужно.
Сейчас проверим.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:27 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
sy-uname написал(а):
profiteer написал(а):
Всем привет.

Есть ли способ внутри LUW (транзакции) породить другой LUW, в котором сделать update и commit так, чтобы это не повлияло на 1-LUW.
Вызывать ФМ по RFC не походит, т.к. сам вызов вызвает неявный commit.
Думал с помощью exec sql открыть новое соединение и в нем все сделать, но админы что-то не хотят добавлять еще одно соединение.

Есть еще варианты?

SAP Transactions

Проверил, не работает что-то.
Коммитит то, что было до вызова call transaction.
Может вызывать нужно с какими-то параметрами?
Да, забыл добавить: вызов обязательно должен быть синхронным.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:37 
Модератор
Модератор
Аватара пользователя

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:42 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
profiteer, Вы не могли бы описать саму задачу? Просто интересно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 12:51 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Цитата:
Проверил, не работает что-то.
Коммитит то, что было до вызова call transaction.
Может вызывать нужно с какими-то параметрами?
Да, забыл добавить: вызов обязательно должен быть синхронным.


Операторы, вызывающие неявный комит:
- call transaction, submit
- call screen
- message e w i
- rfc вызов.
Не используйте inline-обновления (апдейт таблицы в коде вашей программы), а используйте модули обновления.

SUBMIT или CALL TRANSACTION - новый LUW, текущий LUW не завершается...

Code:
CALL FUNCTION 'ZUPD1' IN UPDATE TASK.
CALL FUNCTION 'ZUPD2' IN UPDATE TASK.

SUBMIT zzz. "<-данные можно передать туда через EXPORT/IMPORT, например
или
CALL TRANSACTION zzz.

COMMIT WORK.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 13:00 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Art386 написал:
Цитата:
Проверил, не работает что-то.
Коммитит то, что было до вызова call transaction.
Может вызывать нужно с какими-то параметрами?
Да, забыл добавить: вызов обязательно должен быть синхронным.


Операторы, вызывающие неявный комит:
- call transaction, submit
- call screen
- message e w i
- rfc вызов.
Не используйте inline-обновления (апдейт таблицы в коде вашей программы), а используйте модули обновления.

SUBMIT или CALL TRANSACTION - новый LUW, текущий LUW не завершается...

Code:
CALL FUNCTION 'ZUPD1' IN UPDATE TASK.
CALL FUNCTION 'ZUPD2' IN UPDATE TASK.

SUBMIT zzz. "<-данные можно передать туда через EXPORT/IMPORT, например
или
CALL TRANSACTION zzz.

COMMIT WORK.


Это понятно, но у меня как-раз inline-обновления, так что такой вариант не подойдет


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 13:01 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Ну попробуйте тогда PERFORM ON COMMIT - обновление из вашей программы, не реагирующее на неявный комит, а только на явный....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 13:04 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Art386 написал:
Ну попробуйте тогда PERFORM ON COMMIT - обновление из вашей программы, не реагирующее на неявный комит, а только на явный....


Хочу исходную программу не менять.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 13:05 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Besa написал:
profiteer, Вы не могли бы описать саму задачу? Просто интересно.


Да все так же задача. Сделать простой потокобезопасный счетчик в разрезе номеров документов.
Так, чтобы он не содержал неявного коммита (не коммитил основную программв), чтобы не менять исходную программу и чтобы он был синхронным.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 13:07 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Пономарев Артем написал:
Попробуйте почитать вот это.


Почитал. Удалось добиться того, чего хочется (внутренняя транзакция коммитится, внешняя - нет) только при указании i_update_mode = 4.
Но вот беда - 4-ка эта не задокументирована нифика и даже константы под нее нет. Такую штуку я боюсь использовать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 14:12 
Модератор
Модератор
Аватара пользователя

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

Для четверки, кстати, константа есть. Но она закомментчена :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 14:17 
Специалист
Специалист

Зарегистрирован:
Ср, окт 04 2006, 09:08
Сообщения: 204
Пономарев Артем написал:
А I_EXTERNAL_COMMIT = OSCON_FALSE стоит?

Для четверки, кстати, константа есть. Но она закомментчена :)


да, external_commit = ' '.
А ту константу я тоже видел: "чего-то-там_dirty"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Внутри LUW породить другой LUW и закоммитить его, не затрагивая 1-й LUW
СообщениеДобавлено: Ср, июл 14 2010, 14:23 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Я просто про этот Transaction Service давно читал. А на практике все руки не доходили попробовать.
В принципе, по описанию должно как-раз удачно решать подобные вашей задачи.
Надо будет поковыряться во внутренностях.


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

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


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

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


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

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