最近和OA做资产报废流程的集成,显示接口调用失败,想着可能是调用过程中程序dump了,但是ST22中又没看到错误消息,按照OA的输入参数debug,发现BAPI_ASSET_RETIREMENT_POST中有个E类型的message导致程序直接中断了,关于A、E类型的消息的可以在隐式异常error_message中进行捕获,关于消息类型的处理可参照:[SAP ABAP开发技术总结]消息处理Messages - 江正军 - 博客园 (cnblogs.com)
CALL FUNCTION 'BAPI_ASSET_RETIREMENT_POST'
EXPORTING
origindocreference = ls_origindocreference
generalpostingdata = ls_generalpostingdata
retirementdata = ls_retirementdata
accountassignments = ls_accountassignments
furtherpostingdata = ls_furtherpostingdata
IMPORTING
documentreference = ls_documentreference
return = ls_return
EXCEPTIONS
error_message = 1
OTHERS = 2.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
.
ls_log-msgty = 'E'.
SELECT SINGLE text INTO ls_log-message FROM t100 WHERE sprsl = sy-langu AND arbgb = sy-msgid AND msgnr = sy-msgno.
ELSE.
CASE ls_return-type.
WHEN 'S' OR 'W'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ls_log-bukrs = ls_return-message_v1.
ls_log-belnr = ls_return-message_v2.
ls_log-message = ls_return-message.
ls_log-msgty = 'S'.
WHEN 'E' OR 'I' OR 'A'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
.
ls_log-message = ls_return-message.
ls_log-msgty = 'E'.
WHEN OTHERS.
ENDCASE.
ENDIF.