From 91b6a6f4dac6c613d50e428e5fa09c1726e585cf Mon Sep 17 00:00:00 2001 From: Sandra Rossi Date: Sun, 7 May 2023 19:13:40 +0000 Subject: [PATCH] don't run SALV get_metadata if not displayed yet fix #1097 --- .../zcl_excel_converter_salv_table.clas.abap | 11 ++++++- src/zcl_excel_converter_salv_model.clas.abap | 31 +++++++++++++++++++ src/zcl_excel_converter_salv_model.clas.xml | 16 ++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/zcl_excel_converter_salv_model.clas.abap create mode 100644 src/zcl_excel_converter_salv_model.clas.xml diff --git a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap index 3f0f899..86e8dad 100644 --- a/src/not_cloud/zcl_excel_converter_salv_table.clas.abap +++ b/src/not_cloud/zcl_excel_converter_salv_table.clas.abap @@ -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. - io_salv->get_metadata( ) . + 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. diff --git a/src/zcl_excel_converter_salv_model.clas.abap b/src/zcl_excel_converter_salv_model.clas.abap new file mode 100644 index 0000000..b8c5bac --- /dev/null +++ b/src/zcl_excel_converter_salv_model.clas.abap @@ -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. diff --git a/src/zcl_excel_converter_salv_model.clas.xml b/src/zcl_excel_converter_salv_model.clas.xml new file mode 100644 index 0000000..48ae985 --- /dev/null +++ b/src/zcl_excel_converter_salv_model.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_EXCEL_CONVERTER_SALV_MODEL + E + SALV model utility methods + 1 + X + X + X + + + +