abap2xlsx/src/not_cloud/zcl_excel_converter_salv_model.clas.abap
sandraros 829529cf6a
don't run SALV get_metadata if not displayed yet (#1109)
fix #1097

* don't run SALV get_metadata if not displayed yet

---------

Co-authored-by: Sandra Rossi <sandraros@gmail.com>
2023-05-08 20:18:18 +02:00

40 lines
1.2 KiB
ABAP

CLASS zcl_excel_converter_salv_model DEFINITION
PUBLIC
INHERITING FROM cl_salv_model
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS is_get_metadata_callable
IMPORTING
io_salv TYPE REF TO cl_salv_table
RETURNING
VALUE(result) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_excel_converter_salv_model IMPLEMENTATION.
METHOD is_get_metadata_callable.
DATA: lo_object TYPE REF TO object,
lo_model TYPE REF TO cl_salv_model.
" In 7.52 and older versions, we have a short dump with CL_SALV_TABLE->GET_METADATA if the ALV is not displayed
" (due to io_salv->r_controller->r_adapter not instantiated yet). That's later fixed by SAP (no short dump in 7.57).
" NB: r_controller is always instantiated.
lo_object = io_salv.
TRY.
lo_model ?= lo_object.
CATCH cx_sy_move_cast_error.
" In 7.57, CL_SALV_TABLE is no more a subclass of CL_SALV_MODEL, but CL_SALV_TABLE->GET_METADATA can be called.
result = abap_true.
RETURN.
ENDTRY.
result = boolc( lo_model->r_controller->r_adapter IS BOUND ).
ENDMETHOD.
ENDCLASS.