Вызвать BAPI без изменения базы данных?

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

Мне нужно сделать что-то вроде тестового режима для моего отчета, и я не хочу ничего фиксировать в базе данных.


person gurehbgui    schedule 02.04.2014    source источник
comment
BAPI не будет ничего фиксировать в базе данных, пока не будет вызван BAPI_TRANSACTION_COMMIT.   -  person Jagger    schedule 03.04.2014
comment
Это не во всех случаях. Некоторые BAPI не требуют BAPI_TRANSACTION_COMMIT.   -  person Eric    schedule 06.05.2014


Ответы (4)


Для "старого" bapis ‹3.1 не было возможности предотвратить фиксацию bapi: все bapis выполняли свои фиксации сами. Начиная с версии 4.6 все bapi, изменяющие БД, должны вызываться явно через bapi commit. Если вы не назовете это, ваши изменения не будут сохранены

person Archie    schedule 04.05.2014

Зависит от BAPI.

Некоторые BAPI требуют дополнительного вызова BAPI_COMMIT перед тем, как любые изменения, сделанные первым, будут отправлены в базу данных.

Это означает, например, что вы можете отлаживать вызов BAPI, сколько душе угодно (он будет возвращать все сообщения о результатах или ошибках независимо), а затем, когда отчет будет готов к производству, добавьте вызов BAPI_COMMIT и убедитесь, что любое действие был успешно принят.

person Raven Dreamer    schedule 02.04.2014

Для документов FI вы можете использовать BAPI_ACC_DOCUMENT_CHECK только для проверки правильности всех позиций, это не меняет базу данных.

person Luís Sismeiro    schedule 02.04.2014
comment
с. th. скорее всего должно означать что-то. - person Philip Allgaier; 02.04.2014
comment
Спасибо за это, для меня это новое сокращение. - person Luís Sismeiro; 03.04.2014
comment
Насколько мне известно, он редко используется, и я вытащил его из исходного вопроса для облегчения понимания. - person Philip Allgaier; 03.04.2014

Установите флажок на экране и сделайте что-нибудь грубое, как показано ниже. Не забывайте, это быстрый и грязный пример.

ВЫЗОВ ФУНКЦИИ 'BAPI_ACC_DOCUMENT_CHECK.

LOOP AT lt_return INTO wa_return.
  IF wa_return-type EQ 'E'.
    lv_err_flag = 'X'.
    EXIT.
  ENDIF.
ENDLOOP.

IF lv_err_flag IS INITIAL.
"Success!

  "Is this a test or for real?
  IF lv_test IS INITIAL.

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST
              .

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT
              .

  ELSE.

   "Write some output to screen instead  of posting/commiting as its a test run

  ENDIF.

ELSE.
"Fail!
"Fail logic and output.

ENDIF.
person Dan    schedule 03.04.2014