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

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


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

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


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

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