Проверьте, использует ли Report иерархический ALV или нет - PullRequest
0 голосов
/ 06 ноября 2018

Я нашел способ экспортировать иерархический ALV, как это: ABAP: отчет через GUI имеет 18 столбцов, через RFC 6 (иерархический ALV)

К сожалению, я не знаю заранее, использует ли отчет иерархический ALV или нет.

Если я применяю код вышеуказанного ответа к отчету RFSKPL00, тогда я получаю исключение в cl_salv_bs_runtime_info=>get_data() здесь:

  if t_data_line is requested.
    import t_data_line to t_data_line from memory id cl_salv_bs_runtime_info=>c_memid_data_line.
    if sy-subrc ne 0.
      raise exception type cx_salv_bs_sc_runtime_info  <=========
        exporting
          textid = 'ERROR'.
    endif.
  endif.

Как я могу проверить (с помощью abap кода), использует ли отчет иерархический ALV или нет?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Чтобы определить, является ли ALV классическим ALV или иерархически-последовательным списком:

IF cl_salv_bs_runtime_info=>get( )-structure_line IS INITIAL.
  "---------------------
  " classic ALV
  "---------------------
  cl_salv_bs_runtime_info=>get_data_ref(
    IMPORTING r_data = DATA(lr_data) ).
ELSE.
  "---------------------
  " hierarchical-sequential list 
  "---------------------
  cl_salv_bs_runtime_info=>get_data_ref(
    IMPORTING r_data      = lr_data
              r_data_line = DATA(lr_data_line) ).
ENDIF.
0 голосов
/ 08 ноября 2018

Вы можете использовать TRY / CATCH / ENDTRY для предотвращения дампов, основанных на исключениях на основе улавливаемых классов:

DATA lx_runtime_info TYPE REF TO cx_salv_bs_sc_runtime_info.

TRY.
    cl_salv_bs_runtime_info=>get_data(
      IMPORTING
        t_data      = <lt_data>
        t_data_line = <lt_data_line>
           ).
  CATCH cx_salv_bs_sc_runtime_info INTO lx_runtime_info.
      DATA(lv_result) = lx_runtime_info->if_message~get_text( ).
      DATA(lv_result_long) = lx_runtime_info->if_message~get_longtext( ).
ENDTRY.

(ST22 всегда сообщит вам, какой класс исключений вы должны использовать.)

Поскольку все классы исключений являются подклассами (подклассами, под-подклассами и т. Д.) CX_ROOT, вы можете использовать методы get_text и get_longtext для получения дополнительной информации (реализованной через интерфейс if_message) о проблеме.

...