don't run SALV get_metadata if not displayed yet

fix #1097
This commit is contained in:
Sandra Rossi 2023-05-07 19:13:40 +00:00
parent 869dc52e40
commit 91b6a6f4da
3 changed files with 57 additions and 1 deletions

View File

@ -75,7 +75,16 @@ CLASS zcl_excel_converter_salv_table IMPLEMENTATION.
ls_vari-handle = ls_layout_key-handle.
ls_vari-log_group = ls_layout_key-logical_group.
ELSE.
IF zcl_excel_converter_salv_model=>is_alv_displayed( io_salv ) = abap_true.
io_salv->get_metadata( ) .
ELSE.
" (do same as offline below)
cl_salv_controller_metadata=>get_variant(
EXPORTING
r_layout = lo_layout
CHANGING
s_variant = ls_vari ).
ENDIF.
ENDIF.
ELSE.
* If we are offline we need to build this.

View File

@ -0,0 +1,31 @@
CLASS zcl_excel_converter_salv_model DEFINITION
PUBLIC
INHERITING FROM cl_salv_model
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS is_alv_displayed
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_alv_displayed.
DATA: 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_model ?= io_salv.
result = xsdbool( lo_model->r_controller->r_adapter IS BOUND ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_EXCEL_CONVERTER_SALV_MODEL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>SALV model utility methods</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>