Изменяет ли BAPI_TRANSACTION_COMMIT изменения с момента последнего принятия

1

Я знаю. Когда вы вызываете BAPI в своей программе, которые изменяют данные в системе SAP, вы должны затем вызвать BAPI_TRANSACTION_COMMIT для записи изменений в базу данных.

   JCoFunctionTemplate functionTemplate = dest.getRepository().getFunctionTemplate("BAPI_FIXEDASSET_CHANGE");      
   JCoFunction ChangeFunction = functionTemplate.getFunction();
   ...//some code
   ChangeFunction.execute(destination);

    JCoFunctionTemplate functionTemplate = dest.getRepository().getFunctionTemplate("BAPI_TRANSACTION_COMMIT");   
    JCoFunction commFunct = functionTemplate.getFunction();
    commFunct.execute(destination);

Мой вопрос заключается в том, что BAPI_TRANSACTION_COMMIT фиксирует все изменения со времени последнего коммита? или он совершает только предыдущую транзакцию?

Теги:
abap
sap
jco

2 ответа

1
Лучший ответ

Обычный способ зависимых операций с базой данных также известен как транзакция. Транзакция представляет собой определение атомарной операции на db для последовательного согласования данных после любых изменений. Если n операций базы данных друг за другом принадлежат транзакции, то фиксация должна быть выдана после последней успешной операции. Если какая-либо из n операций завершилась неудачно, транзакция считается не полностью выпущенной. Для этого обычно используется откат. Если у вас есть транзакция, которую нужно разделить, чтобы совершить только несколько изменений, подумайте о перепроектировании всего вашего подхода. Или, что не так приятно, создайте функциональный модуль публикации и вызовите это в задаче обновления. Будьте осторожны с этим. О, и я вижу, вы называете стандартный функциональный модуль sap. Ищите его параметры. Он может иметь флаг для фиксации неявно. И никогда не забывайте транзакцию SAP GUI "BAPI" и читайте документацию. Очень вероятно, что Ваше желание не является последовательным транзакцией, поэтому бапи должен сделать больше. Если что-то позже терпит неудачу, транзакция непоследовательна и поэтому не совершена. В основном сок знает, что должен делать их apis. Но я сомневаюсь, что когда речь идет о качественных уведомлениях и партиях проверки качества. : -D

  • 0
    Джаггер, спасибо за редактирование, запомнит это (я надеюсь на это).
1

BAPI_TRANSACTION_COMMIT выполняет COMMIT WORK или COMMIT WORK AND WAIT зависимости от параметра WAIT. Это означает, что он зафиксирует все изменения в базе данных, которые еще не были зафиксированы.

Таким образом, в вашем примере кода он будет фиксировать изменения из BAPI_FIXEDASSET_CHANGE а также любые сделанные до этого изменения, которые еще не были выполнены.

  • 0
    Благодарю. Не могли бы вы предоставить мне ссылку на эту информацию. и мой следующий вопрос, как я могу совершить только последнюю транзакцию? это возможно в первую очередь?
  • 2
    Фактически он фиксирует все (предварительно) ожидающие операции базы данных фактического LUW, в котором вызывается COMMIT WORK.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню