Текущее время: Ср, июл 30 2025, 21:59

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 07:38 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Подскажите пожалуйста,
1. Обязательно ли после каждого бапишного вызова делать bapi_transaction_commit? В моем случае речь про пакетную загрузку На мой взгляд это расточительно да и как-то противоречит самой идее LUW/транзакций.
1а. Если следущие функции зависят от результата предыдущих, имеет ли для них значение проведенный вовремя коммит. Например после вызова BUPA_CREATE_FROM_DATA вызывать BUPA_IDENTIFICATION_ADD, BUPA_ROLE_ADD.
1б. После неудачного вызова какой-либо функции нужно ли делать rollback для очистки последствий ее выполнения, если на ранее сделанное ее результат не влияет (в примере выше - не создалась идентификация - ну и хрен с ней. Или неудача с созданием одного партнера никак не влияет ни на последующих, ни на предыдущих).

Опять заранее извиняюсь за вопросы человека который как будто никогда с транзакциями не работал, но передо мной код который
а. в пакетной обработке делает коммит после каждого бапишного чиха (причем для уверенности следом иногда встречается commit work :)
б. в случае неудачи какой-либо функции делает rollback - и это в условиях того что каждое успешное изменение уже подтверждено в силу пункта а.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 08:34 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
golomeen написал(а):
Обязательно ли после каждого бапишного вызова делать bapi_transaction_commit?
В зависимости от логики BAPI процесса. В общем случае не обязательно.
golomeen написал(а):
В моем случае речь про пакетную загрузку
Поясните, что Вы имеете в виду под пакетной загрузкой? Вообще в терминах SAP 'пакетная загрузка = Batch Input' <> 'BAPI'
golomeen написал(а):
Если следущие функции зависят от результата предыдущих, имеет ли для них значение проведенный вовремя коммит
Имеет. В Вашем примере BAPI-изменение может не отработать сразу после BAPI создания даже если будет указан явный COMMIT. Для таких целей предназначена сомманда Commit Work and Wait
golomeen написал(а):
После неудачного вызова какой-либо функции нужно ли делать rollback для очистки последствий ее выполнения, если на ранее сделанное ее результат не влияет
Считал, что не нужно, но вот Note 798535 - COMMIT WORK after calling a BAPI. говорит обо обратном
Цитата:
Before the database commit, errors that occurred could be reversed using the ROLLBACK WORK command. After the commit this is no longer possible.

Вообще ФМ BAPI_TRANSACTION_COMMIT предназначен для внешних систем
Цитата:
This method executes a COMMIT WORK command. It is required for transactions developed outside the SAP system that change data in the SAP system by using BAPI calls.
Поэтому дублирование данного ФМ и Commit Work конечно лишнее.
p.s. Кстати, загрузке BP посвященна целая ветка в SPRO. Компоненты общие для всех приложений - Центральный деловой партнер - Перенос внешних данных.
update. Не заметил что у Вас CRM - но что-то похожее наверняка есть.

_________________
Sapere aude!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 09:04 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Цитата:
Имеет. В Вашем примере BAPI-изменение может не отработать сразу после BAPI создания даже если будет указан явный COMMIT. Для таких целей предназначена сомманда Commit Work and Wait


Тут важное уточнение - может не отработать с какой вероятностью, по какой причине и т.д.
Рассмотрим ситуацию когда никакой из видов коммита гарантировано не был вызван.

Мне же нужно делать коммит ОДИН раз на несколько созданий партнеров, внутри каждого из которых будут вызовы про роли, адреса, подразделения и т.д. Для чего - маленький опыт показал, что скорость возрастает, да и вроде как иначе и быть не может. Текущая обработка нескольких записей в секунду это как-то катострофически мало.

Цитата:
Считал, что не нужно, но вот Note 798535 - COMMIT WORK after calling a BAPI. говорит обо обратном
Цитата:
Before the database commit, errors that occurred could be reversed using the ROLLBACK WORK command. After the commit this is no longer possible.

Вообще ФМ BAPI_TRANSACTION_COMMIT предназначен для внешних систем

Мне непонятно - неужели функции BAPI не атомарны - некорректное завершение может оставить за собой какую-то грязь и я должен думать об этой кухне?

Но в целом спасибо, вы меня как-то все-таки обнадежили :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 09:51 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
golomeen написал(а):
Тут важное уточнение - может не отработать с какой вероятностью, по какой причине и т.д.
По причине, что вновь созданного объекта еще нет в БД. см. Note 192235 - WAIT parameter for BAPI_TRANSACTION_COMMIT
Цитата:
However, the processing of the update is carried out asynchronously in an update process and might still be going on after the function module has already been exited.
To be able to work with the updated data when you next access the R/3 System, BAPI_TRANSACTION_COMMIT contains the parameter "WAIT" as of Release 4.5A. This parameter causes the function module to only exit if the update has been completed (in ABAP, the command "commit work and wait" is executed).
golomeen написал(а):
Мне непонятно - неужели функции BAPI не атомарны - некорректное завершение может оставить за собой какую-то грязь и я должен думать об этой кухне?
Согласен. Имел такое же мнение. По хорошему, если ФМ отработал с ошибкой - для пользователя это должно значить, что в системе не произошло никаких изменений. В Вашем случае, считаю целесообразно разделить 2 процесса : создание -> общий commit и изменение для успешно созданных -> общий commit.

_________________
Sapere aude!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:09 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Извините, есть ощущение что мы говорим о разных вещах.
Про WAIT я хорошо понял, речь о другом.
Рассмотрим 2 набора данных клиентов: которые лежат в БД и свежесозданные в достаточно длинном BAPI LUW (судя по коду они где-то в памяти лежат, но не в БД). BAPI-вызов который полагается на существование клиента в своей работе учтет оба набора или тупо будет только в БД смотреть?

Цитата:
Согласен. Имел такое же мнение.

Так и не уловил какова же реальность... ;)

Цитата:
считаю целесообразно разделить 2 процесса : создание -> общий commit и изменение для успешно созданных -> общий commit.

Так если функция не атомарна, неуспех в любой точке обоих процессов ставит вопрос - как откатиться не похерив все целиком? Ну и важен ответ на вопрос чуть выше, может и процесс делить не надо будет?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:21 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
golomeen написал(а):
BAPI-вызов который полагается на существование клиента в своей работе учтет оба набора или тупо будет только в БД смотреть?
только БД.
golomeen написал(а):
Так и не уловил какова же реальность
Реальность такова что, на самом деле самого дела нет. В самой деятельности заключена самость дела - и наоборот. Наоборот получим оборот на, и таким образом перевернем образ. Я уже не говорю о природе говора в роде при уже. Ужи и узы - вы меня понимаете? Ну с SAP примерно та же хрень :D
golomeen написал(а):
Так если функция не атомарна, неуспех в любой точке обоих процессов ставит вопрос - как откатиться не похерив все целиком?
Тут надо понимать, что такое неуспех в каждом отдельном случае. Например, неуспех - ошибка при создании одного BP , в приницпе не влечет за собой ничего критичного для создания остальных BP.
golomeen написал(а):
Ну и важен ответ на вопрос чуть выше, может и процесс делить не надо будет?
Ну без commit для вновь созданных BP, Вы не сможете изменить их данные.

_________________
Sapere aude!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:30 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
golomeen написал(а):
BAPI-вызов который полагается на существование клиента в своей работе учтет оба набора или тупо будет только в БД смотреть?

golomeen, а проверить на практике? Глобальные таблицы в этой ГФ присутствую. При создании данными заполняются. Так что вероятность имеется.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:35 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
спасибо за ответ, но чтобы поверить в такой ужас мне нужны доказательства ;)
логина для приведенных ссылок у меня нет :(

так и представляю себе какую-нибудь субд с неатомарным инсертом или не дай Бог селектом :)
почему тогда коммит/роллбек не включен внутрь функций..? Это же самое естественное решение.

Цитата:
golomeen, а проверить на практике?

по табличкам не лазил, но вызовы ошибок не возвращали. с другой стороны не все же функции проверять - нужен ответ, подкрепленный теорией или документацией :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Если нет доступа к нотам SAP - попросите логин у базисников.
В чем проблема, если вы сами доказательства не читаете? :)

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Ср, сен 23 2009, 10:47 
Модератор
Модератор
Аватара пользователя

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

С этим в САПе полный порядок. Все атомарно.
Если проводить аналогию с СУБД - то дурак разработчик, написавший код, который приводит к неконсистентности данных.
Вы же не будете отрицать что неконсистентность в СУБД возможна? ;)
Да и результаты того же SELECT сильно разнятся в зависимости от уровня изолированности :)
golomeen написал(а):
почему тогда коммит/роллбек не включен внутрь функций..?

Бывает и включен. Бывает что параметр есть специальный для автокоммита внутри. Бывает что коммит можно сделать только самостоятельно.
Зачем так - понятия не имею.
golomeen написал(а):
нужен ответ, подкрепленный теорией или документацией :)

Не будет такого :(
В каждом случае надо разбираться отдельно.
Не придерживается САП единого подхода к BAPI. За что САПу, естественно, давно надо настучать по голове. Но руки коротки :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Чт, сен 24 2009, 13:18 
Специалист
Специалист

Зарегистрирован:
Чт, июн 23 2005, 18:05
Сообщения: 119
Цитата:
почему тогда коммит/роллбек не включен внутрь функций..?


В релизе 3.1 BAPIs сами вызывают команду COMMIT WORK.Другими словами BAPI - синоним LUW или транзакции.
В релизе 4.0 Commit контроль изъят из BAPIs как обеспечение изменений БД. Здесь, должен быть совместимый с RFC ФМ BAPI_TRANSACTION_COMMIT который выполняет команду COMMIT WORK.
Начиная с релиза 4.6:
В транзакционной модели, используемой для разработки BAPI, транзакции представляют - LUW(много BAPI - один LUW)
Операции изменения БД должны выполнятся через обновление.
Как ив релизе 4.0 BAPIs не содержат белее команды COMMIT WORK. Они включают несколько BAPIs объединенных в собственную LUW.
Для закрытия LUW процесса порожденного вызовом BAPIs используют BAPI_TRANSACTION_COMMIT.Этот модуль представляет метод TransactionCommit бизнесобъекта BAPISERVICE.

см.курс BC414
Для более подробно информации см.BAPI User Manual и BAPI Programming Guide.Они доступны в документации по адресу:
SAP Homepage (http://www.sap-ag.de) далее Technology -> Open BAPI Network/ BAPI Section.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)  Тема решена
СообщениеДобавлено: Чт, сен 24 2009, 13:54 
Начинающий
Начинающий

Зарегистрирован:
Ср, сен 09 2009, 15:51
Сообщения: 13
Ответы увы были слишком противоречивыми, пришлось поковыряться в дебрях исходников.

В принципе хватило create_from_data и create_identification.

Функции вполне себе атомарны, [censored] за собой подчищают, при проверке наличия/зависимостей используют и собственные буфера и БД, при коммите буфера сбрасываются в БД максимально умным способом. Бапишный коммит или роллбек очищают эти буфера через buffer_refresh_all.

Делать простой коммит в принципе можно - изменения появятся в БД, но буфера не будут очищены.
Короче говоря сап не дурак, что и требовалось доказать.

Спасибо за внимание.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI и его же коммит (в разрезе CRM/BUPA)
СообщениеДобавлено: Вс, сен 27 2009, 02:49 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Цитата:
Да и результаты того же SELECT сильно разнятся в зависимости от уровня изолированности

раз уж заговорили про уровни изолированности, то видел где-то в исходных кодах следущее:
CALL FUNCTION 'DB_SET_ISOLATION_LEVEL', в комментариях написано, что ставит Commited Read.
Как работет, не проверял..


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

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


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

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


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

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