Можно ли вызвать BAPI, а затем сделать что-нибудь, чтобы предотвратить фиксацию BAPI изменения базы данных?
Мне нужно сделать что-то вроде тестового режима для моего отчета, и я не хочу ничего фиксировать в базе данных.
Можно ли вызвать BAPI, а затем сделать что-нибудь, чтобы предотвратить фиксацию BAPI изменения базы данных?
Мне нужно сделать что-то вроде тестового режима для моего отчета, и я не хочу ничего фиксировать в базе данных.
Для "старого" bapis ‹3.1 не было возможности предотвратить фиксацию bapi: все bapis выполняли свои фиксации сами. Начиная с версии 4.6 все bapi, изменяющие БД, должны вызываться явно через bapi commit. Если вы не назовете это, ваши изменения не будут сохранены
Зависит от BAPI.
Некоторые BAPI требуют дополнительного вызова BAPI_COMMIT перед тем, как любые изменения, сделанные первым, будут отправлены в базу данных.
Это означает, например, что вы можете отлаживать вызов BAPI, сколько душе угодно (он будет возвращать все сообщения о результатах или ошибках независимо), а затем, когда отчет будет готов к производству, добавьте вызов BAPI_COMMIT и убедитесь, что любое действие был успешно принят.
Для документов FI вы можете использовать BAPI_ACC_DOCUMENT_CHECK
только для проверки правильности всех позиций, это не меняет базу данных.
Установите флажок на экране и сделайте что-нибудь грубое, как показано ниже. Не забывайте, это быстрый и грязный пример.
ВЫЗОВ ФУНКЦИИ '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.
BAPI_TRANSACTION_COMMIT
. - person Jagger   schedule 03.04.2014BAPI_TRANSACTION_COMMIT
. - person Eric   schedule 06.05.2014